如何将JSON对象传递到新的活动中

8

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

3个回答

29

传递参数时执行此操作:

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(); } - Silvio Marijic
那只是关键,你可以在里面放任何东西。 - Che Jami
删除 R.id.param 并将任何字符串作为键传递。 - KK_07k11A0585
嘿,这不工作,在主活动中它会使应用程序崩溃,并在日志聊天中说无法将字符串转换为JSON对象。 - Silvio Marijic
打印从getExtra获取的字符串,确保它是有效的JSON。 - marmor

2
在获取JSON数据的Activity中,编写以下代码以发送到TAB Activity:
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值是数据中存在的字段。例如,“Business Id” 1,其中business id是JSON值,请将其替换为您自己的值。


你能否请在你的代码中添加文字解释? - Wicher Visser

1

在使用putExtra方法时,你应该传递一个可序列化或可封装的对象,而不是JSONObject对象,因为它既不是可序列化的也不是可封装的对象,所以无法通过putExtra方法进行传递。

因此,你需要从解析JSONObject对象中创建一个Parcelable或Serializable类,然后才能使用putExtra方法进行传递。

另一个选择是从jsonObject传递JSON字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接