当前位置: 移动技术网 > IT编程>开发语言>Java > Android 使用 Retrofit 保存 高德 静态地图API 获取的地图图片

Android 使用 Retrofit 保存 高德 静态地图API 获取的地图图片

2020年07月23日  | 移动技术网IT编程  | 我要评论

1、导入包

api 'com.squareup.retrofit2:retrofit:2.3.0' // 必要retrofit依赖
api 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' // 必要依赖,和Rxjava结合必须用到
api 'com.squareup.retrofit2:converter-gson:2.3.0' // 必要依赖,解析json字符所用

2、设置 LOCATION_URL = "https://restapi.amap.com/";

      全URL为:

https://restapi.amap.com/v3/staticmap?location=112.481475,36.990564&zoom=10&size=300*300&markers=mid,,A:112.481475,39.990564&key=申请高德web端的key

3、使用方法:

private void getLocationImage(String location , String zoom , String size , String markers ,String key , String scale){
    // 步骤1:创建Retrofit对象
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(LOCATION_URL) // 设置 网络请求 Url
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) // 支持RxJava
                .build();

    // 步骤2:创建 网络请求接口 的实例
        LocationImageService locationImageRequest = retrofit.create(LocationImageService.class);

    // 步骤6:采用Observable<...>形式 对 网络请求 进行封装
        Observable<ResponseBody> observable = locationImageRequest.getImage(location,zoom,size,markers,key,scale);

        
    // 步骤7:发送网络请求
        observable.subscribeOn(Schedulers.io())                 // 在IO线程进行网络请求
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new DisposableObserver<ResponseBody>() {
                    @Override
                    public void onNext(ResponseBody responseBody) {
                        Bitmap bitmap = null;
                        byte[] bys;
                        try {
                            bys = responseBody.bytes();
                            bitmap = BitmapFactory.decodeByteArray(bys, 0, bys.length);
                            try {
                                File floderPath = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
                                FileUtils.saveImg(bitmap, floderPath.getAbsolutePath() , "location");
                                String savePath = floderPath.getAbsolutePath() + File.separator + location + ".jpg";
                                Log.e("MainActivity",savePath + ":保存地址 savePath");
                            } catch (IOException e) {
                                Log.d("MainActivity", e.toString());
                            }
                        } catch (IOException e) {
                            Log.d("MainActivity", e.toString());
                        }

                        if (bitmap != null) {
                            bitmap.recycle();
                        }
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

4、创建LocationImageService

public interface LocationImageService {
    @GET("v3/staticmap")
    Observable<ResponseBody> getImage(@Query("location") String location,@Query("zoom") String zoom,
                                      @Query("size") String size,@Query("markers") String markers,
                                      @Query("key") String key,@Query("scale") String scale);
}

5、创建 FileUtils saveImg() 方法

/**
     * 保存图片到SD卡
     *
     * @param bm         图片bitmap对象
     * @param floderPath 下载文件保存目录
     * @param fileName   文件名称(不带后缀)
     */
    public static void saveImg(Bitmap bm, String floderPath, String fileName) throws IOException {
        //如果不保存在sd下面下面这几行可以不加
        if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            Log.e("FileUtils","SD卡不存在");
            return;
        }

        File folder = new File(floderPath);
        if (!folder.exists()) {
            folder.mkdirs();
        }

        String savePath = folder.getPath() + File.separator + fileName + ".jpg";
        File file = new File(savePath);
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
        bm.compress(Bitmap.CompressFormat.JPEG, 80, bos);
        Log.e("FileUtils", savePath + " 保存成功");
        bos.flush();
        bos.close();
    }

 

本文地址:https://blog.csdn.net/wl724120268/article/details/107403034

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网