2014-10-08 56 views
0

嗨哟家伙从活动发送JSON对象到片段

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

所以我想要做的是在登录活动中的Asynctask中获取JSON对象,然后将此对象发送到我将解析它的片段。

这里的登录活动的的AsyncTask,我尝试发送JSON(这是我得到的retrun从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); 

我与所有的问题是,我总是得到一个NullPointerException当我尝试用getArguments得到jsonString。

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

P.S.我希望我的帖子是不是太乱了XD

+0

在AsyncTask完成之前还是之后添加碎片?我的猜测是在完成之前添加Fragment,因此''onCreateView()'在'doInBackground()'完成之前被调用。 – 2014-10-08 15:03:05

+0

postrequest是否在比doInBackground单独的线程上运行?在这种情况下,您可能会在数据可用之前创建片段 – 2014-10-08 15:03:34

+0

崩溃日志说它是一个NullPointer,位于'String jsonString = getArguments()。getString(“jString”);' – Hadjimina 2014-10-08 15:05:41

回答

0

而不是从的AsyncTask传递变量片段用一个接口,然后传回...

在你的AsyncTask请执行以下操作:

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

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

在你的AsyncTask,创建一个构造函数,并将它state接口:

从我自己的App
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片段。