从另一个 activity 的异步线程更新另一个 activity 中的 recyclerView
Update a recyclerView in another activity from async thread of other activity
我有两个 activity A 和 B。
在 activity A 中,我有一个 AsyncHttpClient 从网站获取一些数据。收到数据后,我刷新 activity A 中的 RecyclerView。但是如果有人切换到 activity B 正在获取数据,我希望刷新 activity B 的 RecyclerView数据获取完成后。
目前我可以在同一个 activity A 中更新,但不能在 B 中更新。
这是我所做的 -
public void loadFromWeb(){
RequestParams params = new RequestParams();
AsyncHttpClient client = new AsyncHttpClient();
params.put("id", id);
client.post("http://example.com/process.php", params, new JsonHttpResponseHandler() {
@Override
public void onStart() {
}
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
try {
//process the response
adapterInActivityA.notifyDataSetChanged();
//This works for Activity A
//How to implement the function updateInActivityB()?
updateInActivityB();
} catch (Exception e) {
//catch exception
}
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
// Process failure
}
});
}
问题是如何实现函数updateInActivityB()
解决方案(根据 Alok 的建议)
以下是我为其他想做同样事情的人所做的详细信息 -
这使用greenrobot's EventBus library
通过将库添加到应用的 build.gradle 文件来编译库
编译库
compile 'de.greenrobot:eventbus:2.4.0'
创建您的活动class,这将存储您正在交流的数据。
//In FirstActivity
public class myEvent {
private final String data;
//Constructor
public myEvent(String data){
this.data = data;
}
public String getData(){
return data;
}
}
每当您想发送更新时,数据已下载(即在 updateInSecondActivity() 函数中)
post更新-
//In FirstActivity
public void updateInSecondActivity(){
EventBus.getDefault().post(new myEvent("Updated Data");
}
现在,在 SecondActivity 中,您必须监听此事件。首先在SecondActivity中注册订阅事件-
报名参加活动
//In SecondActivity
EventBus.getDefault().register(this);
您可以在onCreate()、onStart()、onResume()中注册。也不要忘记在 onPause()、onDestroy()、onStop() -
中注销
注销事件侦听器
//In SecondActivity
EventBus.getDefault().unregister(this);
注册和注销完成后,您必须监听更新是否已被 FirstActivity post 编辑。您可以通过创建一个 onEvent() 函数来完成此操作,该函数侦听 myEvent class -
的 posting
监听事件
//In SecondActivity
public void onEvent(myEvent mE){
String updatedData = me.getData();
// Process/update using the updateData
}
- 你可以尝试做一个可以接收广播的广播接收器
由您的异步线程触发的消息。
或
2.you可以使用事件总线进行无限通信。
或
3.you可以为接收到的内容注册观察者。
逻辑很简单
如果在用户切换到下一个 activity 之前获取数据,则尝试获取数据,但一切都很好。
在第二种情况下,当用户切换较早时,您可以在继续下一步时检查内容 activity。如果还没有收到内容,那么您最终可以在收到内容时通知您的观察者。
我有两个 activity A 和 B。
在 activity A 中,我有一个 AsyncHttpClient 从网站获取一些数据。收到数据后,我刷新 activity A 中的 RecyclerView。但是如果有人切换到 activity B 正在获取数据,我希望刷新 activity B 的 RecyclerView数据获取完成后。
目前我可以在同一个 activity A 中更新,但不能在 B 中更新。
这是我所做的 -
public void loadFromWeb(){
RequestParams params = new RequestParams();
AsyncHttpClient client = new AsyncHttpClient();
params.put("id", id);
client.post("http://example.com/process.php", params, new JsonHttpResponseHandler() {
@Override
public void onStart() {
}
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
try {
//process the response
adapterInActivityA.notifyDataSetChanged();
//This works for Activity A
//How to implement the function updateInActivityB()?
updateInActivityB();
} catch (Exception e) {
//catch exception
}
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
// Process failure
}
});
}
问题是如何实现函数updateInActivityB()
解决方案(根据 Alok 的建议)
以下是我为其他想做同样事情的人所做的详细信息 -
这使用greenrobot's EventBus library
通过将库添加到应用的 build.gradle 文件来编译库
编译库
compile 'de.greenrobot:eventbus:2.4.0'
创建您的活动class,这将存储您正在交流的数据。
//In FirstActivity
public class myEvent {
private final String data;
//Constructor
public myEvent(String data){
this.data = data;
}
public String getData(){
return data;
}
}
每当您想发送更新时,数据已下载(即在 updateInSecondActivity() 函数中)
post更新-
//In FirstActivity
public void updateInSecondActivity(){
EventBus.getDefault().post(new myEvent("Updated Data");
}
现在,在 SecondActivity 中,您必须监听此事件。首先在SecondActivity中注册订阅事件-
报名参加活动
//In SecondActivity
EventBus.getDefault().register(this);
您可以在onCreate()、onStart()、onResume()中注册。也不要忘记在 onPause()、onDestroy()、onStop() -
中注销注销事件侦听器
//In SecondActivity
EventBus.getDefault().unregister(this);
注册和注销完成后,您必须监听更新是否已被 FirstActivity post 编辑。您可以通过创建一个 onEvent() 函数来完成此操作,该函数侦听 myEvent class -
的 posting监听事件
//In SecondActivity
public void onEvent(myEvent mE){
String updatedData = me.getData();
// Process/update using the updateData
}
- 你可以尝试做一个可以接收广播的广播接收器 由您的异步线程触发的消息。
或
2.you可以使用事件总线进行无限通信。
或
3.you可以为接收到的内容注册观察者。
逻辑很简单 如果在用户切换到下一个 activity 之前获取数据,则尝试获取数据,但一切都很好。
在第二种情况下,当用户切换较早时,您可以在继续下一步时检查内容 activity。如果还没有收到内容,那么您最终可以在收到内容时通知您的观察者。