2014-10-08 59 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片段。