繁体   English   中英

如何将json数据从onPostExecute传递到片段?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM