从另一个活动访问json响应

时间:2015-04-02 07:00:05

标签: android json android-fragments android-activity android-asynctask

我有一个片段,我正在访问片段中onCreate()内的API,然后我得到了对同一片段类的json响应(从onPostExecute()返回AsyncTask类)。现在我在onTaskCompleted()内收到了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();

任何帮助都将受到高度赞赏。

已更新

活动与片段之间没有直接联系。因为我没有使用意图。 Fragment是菜单,我在那里加载数据。活动用于搜索。我正在尝试将已经加载的数据用于搜索活动。

5 个答案:

答案 0 :(得分:1)

您可以简单地将整个JSONObject作为字符串。像这样:

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

然后在SecondtActivity中你可以

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

答案 1 :(得分:1)

您可以通过不同方式执行此操作 1)您可以读取json数据并将其存储在哈希映射中并将其传递给该活动。 2)您可以使用intent将相同的json字符串传递给其他活动,并从那里读取json中的数据。 3)您可以将Json字符串存储在项目的静态字符串变量中,并且可以在活动内部访问相同的内容(这对关键应用程序来说不公平,但很容易)

创建一个Constantss.java类并声明

public static String myjson =&#34;&#34 ;;

然后在你的课堂上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

答案 2 :(得分:0)

您可以使用界面将数据从Fragment传递到Activity,这是一个非常简单的示例 -

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);
  }
}

希望这会有所帮助:)

答案 3 :(得分:0)

您可以将一个片段与其所有者活动通信定义并与侦听器接口,在活动上实现此接口,并从片段中调用侦听器,如官方文档中所述:Communicating with Other Fragments

对我来说另一个不错的选择是使用像greenrobot/EventBus

这样的事件总线

答案 4 :(得分:0)

如果您不打算使用此json数据,则无法处理它。您只需将String中的这个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);


在第二个Activity中,你只需要再次将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);
        ...