2016-05-12 50 views
0

在我的工作中,我需要將Json數據從我的onPostExecute()傳遞給擴展片段的類。我通過以下方式嘗試了很多,但無法獲得所需的輸出....請幫助我。 這裏下面的代碼是從我onPostExecute():如何將json數據從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; 
} 

}

+0

我想也許你應該從頭開始 - 通過學習Android的方式,而不是深入探索一些更復雜的事情,比如你想要做的事情。例如:http://developer.android.com/guide/components/fundamentals.html 如果你不相信你需要這個,那麼你可以嘗試從你的'Fragment'中通過使用'AsyncTask'來調用一個匿名的'AsyncTask'調用,你可以在'Fragment'中覆蓋'onPostExecute',從而使數據直接可用。但要小心,不要將任何上下文傳遞給'AsyncTask'。 – Darwind

回答

1

您可以在片段中調用onCreateView下面的代碼:

String jsonData = getActivity().getIntent().getStringExtra("json_data"); 
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宏偉原則之一!

我希望這有助於!祝你好運,快樂的編碼!

相關問題