Android 使用 Retrofit 保存 高德 静态地图API 获取的地图图片
程序员文章站
2022-07-03 09:10:35
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
上一篇: [扩展欧拉函数] POJ2142The Balance
下一篇: 通过fiddler抓包