【问题标题】:How to pass JSON Object to new activity [duplicate]如何将 JSON 对象传递给新活动
【发布时间】:2012-08-31 11:01:38
【问题描述】:

我有一个应用程序需要使用 AsyncTask 从 URL 下载 JSON,并在 onPostExecute() 上使用 putExtra 方法将该 JSON 对象传递给下一个 Activity,但我不断收到错误消息,显示“putExtra 只能用于传递字符串而不是对象”?如何解决这个问题?

【问题讨论】:

    标签: android json android-intent


    【解决方案1】:

    传递参数时这样做:

    intent.putExtra("json", jsonobj.toString());
    

    然后在你的新活动中像这样解析它:

    JSONObject obj = new JSONObject(getIntent().getStringExtra("json"));
    

    【讨论】:

    • 我不明白 R.id.param 部分,这里是代码protected void onPostExecute(Object result){ Intent startApp = new Intent("com.example.androidhive.HOME"); startApp.putExtra(R.id.param, result.toString()); startActivity(startApp); //finish(); }
    • 这只是关键,你可以放任何你想要的东西。
    • 移除 R.id.param 并将任意字符串作为键传递
    • 嘿,这不起作用,在主要活动上它会使应用程序崩溃,并且在日志聊天中说它无法将字符串转换为 json 对象
    • 打印你从getExtra得到的字符串,确保它是一个有效的JSON
    【解决方案2】:

    在您获取 JSON 数据的活动中,编写以下代码以发送到 TAB 活动

    Intent i = new Intent(getApplicationContext(), Another_Activity.class);
                                i.putExtra("key", jsonObject.toString());
                                startActivity(i);
    

    访问数据即JSON对象在选项卡Activity中写入以下代码

       JSONObject jsonObject = new JSONObject(getIntent().getStringExtra("key"));
                        Toast.makeText(Another_Activity.this, ""+jsonObject.get("Your JSON VALUE"), Toast.LENGTH_SHORT).show();
    

    您的 JSON VALUE 是数据中存在的字段。例如“企业 ID”1 这里的业务 id 是 JSON 值,用你的替换它

    【讨论】:

    • 您能否在您的代码中添加文字说明?
    【解决方案3】:

    你应该通过putExtra传递一个可序列化或可打包的对象,因为JSONObject既不是可序列化的也不是可打包的对象,所以你不能通过putExtra传递它。

    所以你需要通过解析 JSONObject 来创建 Parcelable 或 Serializable 类,然后你可以使用 putExtra 方法来传递它。

    另一个选项是从 jsonOjbect 传递 JSON 字符串。

    【讨论】:

      猜你喜欢
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      • 2019-07-01
      相关资源
      最近更新 更多