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
答案 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将其发送到片段。