1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Android 使用 Retrofit 保存 高德 静态地图API 获取的地图图片

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

时间:2022-11-13 17:18:02

相关推荐

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

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 ="/";

全URL为:

/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>() {@Overridepublic 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();}}@Overridepublic void onError(Throwable e) {}@Overridepublic 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));press(pressFormat.JPEG, 80, bos);Log.e("FileUtils", savePath + " 保存成功");bos.flush();bos.close();}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。