私はretrofit2を使用してAndroidアプリのネットワークを処理します。 netWorkManager.getsearch()
のようにネットワークを抽象化し、非同期要求とUI更新を行います。私が見たすべてのチュートリアルには、UIを更新するためのコードの@Override onResponse
のコールバックのUIを更新するコードがあります(そして、これをnetworkManagerで処理したいと思います)。コールバックの返却を処理するための関数やメソッドを渡したかったのですが、私の研究では不可能ではないと思います。 retrofit2の使用について何か不足していますか?私の問題を解決するためのアイデアや、Androidでのネットワークの良好な抽象化の仕方はありますか?retrofit2抽象化ネットワークandroid
0
A
答えて
0
同期()コールを使用するか非同期(enqueue()
)コールを使用するかによって異なりますが、不可能ではありません。
あなたがhereから知っているように、これはあなたがそれらを処理する方法である:
非同期コールの場合Call<List<Car>> carsCall = carInterface.loadCars();
try {
Response<List<Car>> carsResponse = carsCall.execute();
} catch (IOException e) {
e.printStackTrace();
//network Exception is thrown here
}
if(carsResponse != null && !carsResponse.isSuccess() && carsReponse.errorBody() != null){
// handle carsResponse.errorBody()
}
:そう
public interface RetrofitCarService {
@GET("api/getCars")
Call<List<Car>> getCars();
}
しかし、もし同じよう定義されたサービスのために
Call<List<Car>> call = service.loadCars();
call.enqueue(new Callback<List<Car>>() {
@Override
public void onResponse(Response<List<Car>> response) {
// Get result from response.body(), headers, status codes, etc
}
@Override
public void onFailure(Throwable t) {
//handle error
}
});
あなたはそれを抽象化したいと思うでしょう、このようなことを簡単に行うことができます
public interface YourCallback<T> {
void onSuccess(T t);
void onError(Throwable throwable);
}
public interface CarService {
void getCars(YourCallback<List<Car>> callback);
}
public class CarServiceImpl implements CarService {
private RetrofitCarService retrofitCarService;
public CarServiceImpl(RetrofitCarService retrofitCarService) {
this.retrofitCarService = retrofitCarService;
}
public void getCars(YourCallback<List<Car>> callback) {
retrofitCarService.getCars().enqueue(new Callback<List<Car>>() {
@Override
public void onResponse(Response<List<Car>> response) {
callback.onSuccess(response.body());
}
@Override
public void onFailure(Throwable t) {
callback.onError(t);
}
}
}
}
そして、あなたは離れて抽象化されたい:
@Inject
CarService carService;
public void something() {
carService.getCars(new YourCallback<List<Car>>() {
public void onSuccess(List<Car> cars) {
refreshDataSet(cars);
}
public void onError(Throwable throwable) {
showError(throwable);
}
});
}
これはしかし、同期と非同期の両方を表現するCall
秒の能力を離れて投げるだけでも非同期にごService
を強制することに注意してくださいオペレーション。少し考えてみると、Call<T>
も抽象化することができます。
関連する問題
- 1. Androidインテントへのコールの抽象化
- 2. ケラス、siameseネットワーク、機能を抽象化する方法?
- 3. Delphiの抽象化
- 4. Pythonの抽象化
- 5. サービス抽象化springMVC
- 6. React.jsの抽象化
- 7. Pythonの抽象化?
- 8. ケースクラスの抽象化
- 9. ValueObjectの抽象化
- 10. インタフェースと抽象化
- 11. Androidレルム抽象クラスインスタンシエート
- 12. LINQのデータコンテキストの抽象化
- 13. Python - 抽象クラスのサブクラス化
- 14. スカラのコード抽象化
- 15. コアデータフェッチ要求の抽象化
- 16. Express JS Routerミドルウェア抽象化
- 17. Java Message Queue抽象化
- 18. 春のキャッシュ抽象化
- 19. ORMプロバイダの抽象化
- 20. Apache VirtualHost URLの抽象化
- 21. ゴラン木構造抽象化
- 22. スカラー:抽象クラスのインスタンス化?
- 23. インフラストラクチャコード上のDDD抽象化
- 24. 動作の抽象化
- 25. RavenDB ForEach ExtensionMethod抽象化
- 26. 6抽象化、1構築
- 27. 抽象JPA DAOで名前付きクエリを抽象化
- 28. Android Volley抽象的なonResponse
- 29. android GoogleMap setOnInfoWindowClickListener - 抽象メソッド
- 30. 抽象化またはカプセル化?