将JSON对象从活动发送到Fragment

时间:2014-10-08 15:01:10

标签: java android json android-fragments android-asynctask

Heyo家伙

我几个小时以来一直在寻找答案。能否请你帮忙。这非常重要。

所以我要做的是在Login活动中的Asynctask中获取一个JSON对象,然后将该对象发送到Fragment,我将在其中解析它。

这是登录活动的Asynctask,我尝试发送JSON(我从postrequest()获取后退):

@Override
    protected Void doInBackground(Void... params)
    {
        String JSON = null;
        try
        {

        JSON = new String(postrequest());

        Bundle bundle = new Bundle();
        bundle.putString("jString", JSON);
        Timetable fragobj = new Timetable();
        fragobj.setArguments(bundle);

        }
        catch (IOException e)
        {
            e.printStackTrace();
        }

    }

这是我的片段(Timetable.class),我尝试在onCreatView中获取JSON

String jsonString = getArguments().getString("jString");
JSONObject jsonObject = new JSONObject(jsonString);

我的问题是,当我尝试使用getArguments获取jsonString时,我总是得到NullPointerException。

任何帮助将不胜感激。
干杯

附:我希望我的帖子不是太乱了XD

1 个答案:

答案 0 :(得分:0)

不是将变量从AsyncTask传递到Fragment,而是使用接口然后将其传回...

在AsyncTask中执行以下操作:

 public interface WebServiceResult {
     void OnWebService(int type, String result);
 }

这就是我设置它的方式所以我可以使用相同的Web服务进行多个不同的调用。

在AsyncTask中,创建一个构造函数并让它说明接口:

WebServiceResult listener;
public WebService(Context c, WebServiceResult listener, JSONObject jObject,
        int typeofCall) {
    this.c = c;
    this.typeofCall = typeofCall;
    this.listener = listener;
    this.jObject = jObject;
}

来自我自己的应用程序的代码。

然后在调用完成后,你的json从doInBackground传递给你的onPostExecute

if (result != null) {
    if (listener != null)
        listener.OnWebService(typeofCall, result);
} else {
    //Do Else Statement
}

这会将变量传递回您的活动,您可以使用getArguments将其发送到片段。