如何将onPostExecute中的json数据传递给片段?

时间:2016-05-12 19:58:47

标签: android

在我的工作中,我需要将来自onPostExecute()的Json数据传递给扩展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;
}

}

2 个答案:

答案 0 :(得分:1)

您可以在onCreateView下一个代码中调用片段:

String jsonData = getActivity().getIntent().getStringExtra("json_data");

答案 1 :(得分:0)

当我看到这样的场景时,我认为你最好的朋友会使用事件。有像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宏观原则之一!

我希望这有帮助!祝你好运,编码愉快!