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