| | |
| | | package com.dayu.pipirrapp.net; |
| | | |
| | | import android.content.Context; |
| | | |
| | | import android.util.Log; |
| | | |
| | | import com.dayu.pipirrapp.bean.WeatherResponse; |
| | | import com.dayu.pipirrapp.net.subscribers.BaseProgressSubscriber; |
| | | import com.dayu.pipirrapp.net.subscribers.ProgressSubscriber; |
| | | import com.dayu.pipirrapp.net.subscribers.SubscriberListener; |
| | | import com.dayu.pipirrapp.utils.MapJpgUtils; |
| | | import com.dayu.pipirrapp.utils.MyJsonParser; |
| | | |
| | | import java.io.File; |
| | | import java.io.FileNotFoundException; |
| | | import java.io.FileOutputStream; |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | |
| | | import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; |
| | | import io.reactivex.rxjava3.annotations.NonNull; |
| | | import io.reactivex.rxjava3.core.Observable; |
| | | import io.reactivex.rxjava3.core.Observer; |
| | | import io.reactivex.rxjava3.disposables.Disposable; |
| | | import io.reactivex.rxjava3.disposables.CompositeDisposable; |
| | | import io.reactivex.rxjava3.functions.Function; |
| | | import io.reactivex.rxjava3.schedulers.Schedulers; |
| | | import okhttp3.MediaType; |
| | | import okhttp3.MultipartBody; |
| | | import okhttp3.RequestBody; |
| | | import okhttp3.ResponseBody; |
| | | import retrofit2.Call; |
| | | import retrofit2.Callback; |
| | | import retrofit2.Response; |
| | | |
| | | |
| | | /** |
| | |
| | | */ |
| | | public class ApiManager { |
| | | |
| | | static String TAG = "ApiManager"; |
| | | |
| | | static ApiManager apiManager; |
| | | //文件上传失败重复次数 |
| | | int uplodFilerepeatSize = 3; |
| | | |
| | | ApiService apiService; |
| | | private CompositeDisposable compositeDisposable = new CompositeDisposable(); // 管理订阅事件 |
| | | |
| | | /** |
| | | * 初始化通信框架 |
| | |
| | | |
| | | public ApiManager() { |
| | | apiService = RetrofitClient.getInstance().getApiService(); |
| | | |
| | | } |
| | | |
| | | public static ApiManager getInstance() { |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 获取天气 |
| | | * |
| | | * @param data 经纬度(格式是 纬度:经度,英文冒号分隔) |
| | | * @param callback |
| | | * @param <T> |
| | |
| | | } |
| | | |
| | | |
| | | public void donwLoadTile(Context context, String urlPath) { |
| | | Observable<ResponseBody> observable; |
| | | observable = apiService.downloadTile(urlPath); |
| | | |
| | | |
| | | compositeDisposable.add( |
| | | observable |
| | | .subscribeOn(Schedulers.io()) // 网络请求在 I/O 线程中进行 |
| | | .observeOn(Schedulers.io()) // 回调处理也在 I/O 线程 |
| | | .subscribe( |
| | | responseBody -> { |
| | | boolean success = false; |
| | | if (!MapJpgUtils.getInsatance(context).isHasFiles(urlPath)) { |
| | | success = MapJpgUtils.getInsatance(context).saveTileToCache(urlPath, responseBody); |
| | | } |
| | | if (success) { |
| | | Log.d(TAG, "Download success for tile: " + urlPath); |
| | | } else { |
| | | Log.e(TAG, "Failed to save tile to disk: " + urlPath); |
| | | } |
| | | }, |
| | | throwable -> Log.e(TAG, "Download failed for tile: " + urlPath) |
| | | ) |
| | | ); |
| | | |
| | | |
| | | } |
| | | |
| | | // 停止线程池,释放资源 |
| | | public void clearDisposables() { |
| | | if (!compositeDisposable.isDisposed()) { |
| | | compositeDisposable.dispose(); |
| | | } |
| | | } |
| | | |
| | | } |