[英]How can I pass json data from onPostExecute to a fragment?
在我的工作中,我需要将Json数据从onPostExecute()传递给扩展fragment的类。 我已经通过以下方式尝试了很多,但无法获得所需的输出。...请帮助我。 下面的代码来自我的onPostExecute():
else if(boollatlon==true){
json_string=s;
Intent intent=new Intent(context,MapFragment.class);
//MapFragment.class is that class that extends Fragment
intent.putExtra("json_data",json_string);
context.startActivity(intent);
}
以下是我的MapFragment类:
public class MapFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_map_fragment,container,false);
return view;
}
}
您可以在下一个代码中的onCreateView中调用该片段:
String jsonData = getActivity().getIntent().getStringExtra("json_data");
当我看到这种情况时,我认为您最好的朋友将使用事件。 有像EventBus这样的强大库-我最喜欢的库。
您可以这样添加到build.gradle
文件中:
compile 'org.greenrobot:eventbus:3.0.0'
然后,您可以创建一个简单的普通旧Java对象,如下所示:
(我假设您是从某个地方获取信息的,这就是为什么您拥有AsyncTask的原因)
public class FetchCompletedEvent{
public String json;
public FetchCompletedEvent(String json){
this.json = json;
}
}
现在,在您的onPostExecute
方法中,您可以通过使用EventBus
来通知事件完成的片段,如下所示:
//inside onPostExecute()
String jsonString = result;
EventBus.getDefault().post(new FetchCompletedEvent(jsonString));
就是那部分了。 接下来是您的片段类,执行以下操作:
//inside onAttach or onCreate of your fragment;
EventBus.getDefault().register(this);
//now override onEvent method to handle the json String you will be given by the event
public void onEvent(FetchCompletedEvent event){
//you could consider using a getter in your event class for this
String json = event.json;
//now you can update your UI with the new JSON data
}
//finally, unregister inside onDestroy
@Override public void onDestroy(){
super.onDestroy()
EventBus.getDefault().unregister(this);
}
那就是从AsyncTask的onPostExecute方法内部将数据传递到片段的全部操作。
事件有助于解耦代码并消除过多的依赖关系-OOP的主要原则之一!
我希望这有帮助! 祝您好运,编码愉快!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.