0

我有一個片段,我正在訪問片段中的onCreate()裏面的API,然後我得到了對相同片段類的JSON響應(從在AsyncTask類)。現在,我收到了onTaskCompleted()內JSON響應,如下圖所示,從另一個活動訪問JSON響應

@Override 
    public void onTaskCompleted(JSONArray responseJson) { 
     try { 
      for (int i = 0; i < responseJson.length(); ++i) { 
       final JSONObject object = responseJson.getJSONObject(i); 
       ... 

我的問題是我有一個活動,我想這些數據獲得該活動。我怎樣才能訪問這些數據?

是否有可能對我來說,做這樣的事情,

mdata = fragment.onTaskCompleted(); 

任何幫助將高度讚賞。

修訂

有活性和片段之間沒有直接接觸。因爲我沒有使用意圖。片段是菜單,我在那裏加載數據。活動用於搜索。我試圖讓已經加載的數據搜索活動。

+0

你可以使用@Fahim給出的答案 – 2015-04-02 07:06:58

回答

1

您可以用不同的方式 1)可以讀取JSON數據並將其存儲在一個哈希表,並把它傳遞給活動做到這一點。 2)您可以使用intent將相同的json字符串傳遞給其他活動,並從json中讀取數據。 3)您可以將JSON字符串存儲在您的項目的靜態字符串變量,並可以訪問相同的活動中(這是不公平的,關鍵的應用程序,但很容易)

創建一個類Constantss 。java並聲明

public static String myjson =「」;

類裏面

然後onTaskcomplete

@Override 
    public void onTaskCompleted(JSONArray responseJson) { 
     try { 

Constantss. myjson=responseJson.toString(); 
      for (int i = 0; i < responseJson.length(); ++i) { 
       final JSONObject object = responseJson.getJSONObject(i); 
.... 
} 

內片段

String js; 
if(Constantss.myjson.length()>0) 
js=Constantss.myjson; //this is the json string convert i to jsonarray and use 
+0

你能告訴我如何使用第三個選項,一些幫助代碼級請 – modabeckham 2015-04-02 07:07:59

+0

@modabeckham檢查我的編輯 – 2015-04-02 07:14:07

+0

Karthika PB能告訴我到底是什麼想要有裏面的活動和片段 – modabeckham 2015-04-02 07:23:10

1

您可以簡單地將整個JSONObject作爲一個字符串。事情是這樣的:

i.putString("product", jsonObj.toString); 

然後在SecondtActivity你可以

JSONObject jsonObj = new JSONObject(getIntent().getStringExtra("product")); 
+0

如何將片段中的數據發送到活動?沒有直接聯繫,因爲我沒有使用意圖。片段是菜單,我在那裏加載數據。活動用於搜索。 – modabeckham 2015-04-02 07:10:18

0

您可以使用接口從片段的數據傳遞到活動,這裏有一個很簡單的例子 -

public class Fragment2 extends Fragment { 

    public interface onSomeEventListener { 
    public void someEvent(String s); 
    } 

    onSomeEventListener someEventListener; 

    @Override 
    public void onAttach(Activity activity) { 
    super.onAttach(activity); 
     try { 
      someEventListener = (onSomeEventListener) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() + " must implement onSomeEventListener"); 
     } 
    } 

    final String LOG_TAG = "myLogs"; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.fragment2, null); 

    Button button = (Button) v.findViewById(R.id.button); 
    button.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
     someEventListener.someEvent("Test text to Fragment1"); 
     } 
    }); 

    return v; 
    } 
} 

內您的活動 -

public class MainActivity extends Activity implements onSomeEventListener{ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Fragment frag2 = new Fragment2(); 
     FragmentTransaction ft = getFragmentManager().beginTransaction(); 
     ft.add(R.id.fragment2, frag2); 
     ft.commit(); 
    } 

    @Override 
    public void someEvent(String s) { 
     Fragment frag1 = getFragmentManager().findFragmentById(R.id.fragment1); 
     ((TextView)frag1.getView().findViewById(R.id.textView)).setText("Text from Fragment 2:" + s); 
    } 
} 

希望這有助於:)

+0

非常感謝您的回答我能以不同的方式實現這個 – modabeckham 2015-04-02 09:05:58

0

你可以用它的主人活動定義和接口與聽衆,實施上的活動這個接口,並調用通信的一個片段來自片段的聽衆,正如其在正式文件中提出的那樣:Communicating with Other Fragments

另一個去od選項對我來說就是使用類似greenrobot/EventBus的事件總線

+0

非常感謝您的回答 – modabeckham 2015-04-02 09:05:22

0

如果你不打算使用這個json數據,你不能處理它。你只需要把這個json的字符串傳遞給你處理這些數據的第二個Activity,如果你需要的話。
因此,代碼可能是這樣的:

@Override 
public void onTaskCompleted(JSONArray responseJson) { 
    if(responsejson != null){ 
     String json = responsejson.toString(); 
     Intent intent = new Intent(getActivity(), SecondActivity.class); 
     intent.putExtra("json", json); 
     startActivity(intent); 


而在第二個活動,你只需要在json字符串成JSON數據再次轉換,就像這樣也許:

String json = getIntent().getString("json"); 
JsonArray jsonArray = new JsonArray(json); 
try { 
    for (int i = 0; i < jsonArray.length(); ++i) { 
     final JSONObject object = jsonArray.getJSONObject(i); 
     ... 
+0

非常感謝您的回答我能以不同的方式實現這一點 – modabeckham 2015-04-02 09:06:02