欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-12 09:14:25
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....

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

相关标签: android开发