我正在Android应用中的Repository类中发出网络请求。我这样做是为了学习目的,所以我试图理解,不使用RXJava,我如何从我的存储库一直更新UI?
电话跟踪就像MainActivity一样 - >演示者 - >交互者 - >存储库 - >网络
这是我在存储库中的代码
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());
}
}
});
}
}
答案 0 :(得分:1)
Imho有两种经典的方法来做这样的事情:
一种方法是将回调对象传递给存储库,并在收到回复时调用回调操作。
第二种(并且更优雅)方式是在您的应用中使用local broadcasts。它们可用于传输消息(例如,如果您的服务中发生了某些事情,并且您想要通知其他线程 - 例如UI线程 - 关于它。)
在android中有很多关于(local) broadcasts的教程。普通广播用于在应用之间(以及系统和应用之间)进行通信,而本地广播可用于在您的应用中发送信息。
答案 1 :(得分:0)
有一个名为EventBus的库可以很好地处理MVP结构。
简而言之,它将事件(具有数据的对象)从一个类传递到另一个类。在您的情况下,您可以将其中包含CurrentWeather
对象的事件从Repository传递到Presenter,然后更新UI。