使用异步 Http 下载数据后将数据发送到片段



我正在解析JSON与活动中的Async Http。一旦数据成功解析,我希望它可用于活动持有的两个片段。一个片段是显示下载数据的ListView,另一个片段是显示数据的Google MapView - 这并不重要。

下载数据后:

@Override
public void onSuccess(int statusCode, Header[] headers, String responseString) {
    // Data downloaded
}

我想将其发送给这两个fragments,并用数据更新地图和ListView

因此,我想以某种方式在这两个片段中实现某种侦听器,该侦听器将侦听"onSuccess"发生,然后使用它检索到的数据。

因此,如果onSuccess发生在Fragments实例化之前,它们将立即显示数据。如果没有,他们会等待它。

有人可以帮助我实现这一点吗?我不知道该如何解决这个问题。

您有以下选项:

  • 使用事件总线并将数据发送到两个片段
  • 将数据存储在活动中,使用LocalBroadcasrManager并发送广播,让片段知道数据已经从片段下载和访问数据,即 ((MyActivity)getActivity()).getData();

消息的本地广播适合这种情况。

以下几点也会对您有所帮助。

  1. 获取数据后实例化片段并通过setArgument(Bundle)方法传递(如果响应获取是一次性的)
  2. 如果 onSucces() 中的数据定期出现,则实现您自己的方法来更新两个片段的 UI,并从 Activity.onSuccess(...) 方法调用实现的方法。

你可以使用 Handler 来实现这一点......您可以将所有数据放在捆绑包中并将其发送到处理程序,并在片段中声明此处理程序,并将此处理程序传递给异步类,,,,当您获得响应时,只需将消息发送到该处理程序......

 Message msg =  new Message();
 Bundle bundle = new Bundle();
   bundle.putString("Test", "test value");
 msg.setData(bundle);
  handler.sendMessage(msg);

//Handler in The UI Thread Retreieves The Data
//And Can Update the GUI as Required
 private Handler handler = new Handler() {
  @Override
  public void handleMessage(Message msg) {
Bundle bundle = msg.getData();
//set data to your views here.........
}
};

希望对您有所帮助。

处理器

易于与 EventBus 一起使用。

依赖关系:https://github.com/greenrobot/EventBus

implementation("org.greenrobot:eventbus:3.3.1")
<dependency>
    <groupId>org.greenrobot</groupId>
    <artifactId>eventbus-java</artifactId>
    <version>3.3.1</version>
</dependency>

像这样使用它:入门

public class MessageEvent {
   public final String message;
   public MessageEvent(String message) {
      this.message = message;
   }
}

随时随地订阅数据:

@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
   Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();
}

聆听:

EventBus.getDefault().register(this);

相关内容

  • 没有找到相关文章

最新更新