使用 MVP 在 Android 网络请求上更新 UI
Update UI on Android networking request using MVP
我正在我的 Android 应用程序的存储库 class 中发出网络请求。我这样做是出于学习目的,所以我试图了解,如果不使用 RXJava,我将如何从我的存储库一直更新 UI?
调用路径如下 MainActivity -> Presenter -> Interactor -> Repository -> Network
这是我在存储库中的代码
WeatherRepository {
WeatherNetwork network = new WeatherNetwork();
public CurrentWeather getCurrentWeather(float lat, float lng) {
network.getDailyWeather(lat, lng, new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
try{
String jsonData = response.body().string();
if (response.isSuccessful()) {
CurrentWeather currentWeather = getCurrentWeatherData(jsonData);
}
} catch(JSONException e) {
Log.d("DWPresen" + " JSONEXCEPTION", e.getMessage());
} catch(IOException e){
Log.d("DWPresent" + " IOEXCEPTION", e.getMessage());
}
}
});
}
}
恕我直言,有两种经典方法可以做到这一点:
一种方法是将回调对象向下传递到存储库,并在您收到响应时调用回调操作。
第二种(恕我直言,更优雅)的方法是在您的应用中使用 local broadcasts。它们可用于传输消息(例如,如果您的服务中发生了某些事情并且您想通知其他线程 - 例如 UI 线程 - 关于它。)
android里面有很多关于(local) broadcasts的教程。普通广播用于应用程序之间(以及系统和应用程序之间)的通信,而本地广播可用于仅在您的应用程序内发送信息。
有一个名为 EventBus 的库非常适合 MVP 结构。
简而言之,它将事件(带有数据的对象)从一个 class 传递到另一个。在您的情况下,您可以将其中包含 CurrentWeather
对象的事件从 Repository 传递到 Presenter,然后更新 UI.
我正在我的 Android 应用程序的存储库 class 中发出网络请求。我这样做是出于学习目的,所以我试图了解,如果不使用 RXJava,我将如何从我的存储库一直更新 UI?
调用路径如下 MainActivity -> Presenter -> Interactor -> Repository -> Network
这是我在存储库中的代码
WeatherRepository {
WeatherNetwork network = new WeatherNetwork();
public CurrentWeather getCurrentWeather(float lat, float lng) {
network.getDailyWeather(lat, lng, new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
try{
String jsonData = response.body().string();
if (response.isSuccessful()) {
CurrentWeather currentWeather = getCurrentWeatherData(jsonData);
}
} catch(JSONException e) {
Log.d("DWPresen" + " JSONEXCEPTION", e.getMessage());
} catch(IOException e){
Log.d("DWPresent" + " IOEXCEPTION", e.getMessage());
}
}
});
}
}
恕我直言,有两种经典方法可以做到这一点:
一种方法是将回调对象向下传递到存储库,并在您收到响应时调用回调操作。
第二种(恕我直言,更优雅)的方法是在您的应用中使用 local broadcasts。它们可用于传输消息(例如,如果您的服务中发生了某些事情并且您想通知其他线程 - 例如 UI 线程 - 关于它。)
android里面有很多关于(local) broadcasts的教程。普通广播用于应用程序之间(以及系统和应用程序之间)的通信,而本地广播可用于仅在您的应用程序内发送信息。
有一个名为 EventBus 的库非常适合 MVP 结构。
简而言之,它将事件(带有数据的对象)从一个 class 传递到另一个。在您的情况下,您可以将其中包含 CurrentWeather
对象的事件从 Repository 传递到 Presenter,然后更新 UI.