使用 Async Http 下载数据后将数据发送到 Fragments

Send data to Fragments after it's been downloaded with Async Http

我正在用 Activity 中的 Async Http 解析 JSON。一旦数据被成功解析,我希望它对 Activity 持有的两个片段都可用。一个片段 ListView 显示下载的数据,另一个片段 Google MapView 显示数据 - 无关紧要。

数据下载完成后:

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

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

所以我想在这两个片段中实现某种监听器,监听 "onSuccess" 的发生,然后使用它检索到的数据。

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

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

您有以下选择:

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

你可以为此使用处理程序......你可以将所有数据放在 bundle 中并将其发送到处理程序并在你的片段中声明此处理程序并将此处理程序传递给你的异步 class , ,当您收到响应时,只需将消息发送给该处理程序......

 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.........

}

};

希望对您有所帮助..

Handler

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

以下几点对您也有帮助。

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