0

我正在使用 json 创建项目列表。当用户单击时,它会打开另一个屏幕,其中包含有关该项目的一些详细信息。我在将图像发送到该活动时遇到问题。这是我的 json 解析代码:

for (int i = 0; i < data.length(); i++) {
        JSONObject c = data.getJSONObject(i);

        String id = c.getString(TAG_ID);
        String name = c.getString(TAG_NAME);
        String link_image = c.getString(TAG_LINK_IMAGE);        

        HashMap<String, String> map = new HashMap<String, String>();

        map.put(TAG_ID_RS, id);
        map.put(TAG_NAME, name);
        map.put(TAG_LINK_IMAGE, link_image);

        Data.add(map);
}

这是针对 setOnItemClickListener 的:

public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {

                    String name_two = ((TextView) view
                            .findViewById(R.id.name)).getText()
                            .toString();

                    Intent i = new Intent(getApplicationContext(),
                    SingleItem.class);

                    i.putExtra("name", name_two);

                    startActivity(i);

                }

在发送字符串“名称”的情况下,我正在定位 TextView 并从中拉出字符串,但是图像呢?谢谢。

4

2 回答 2

1

Intent 包并不意味着传递大量数据。它们最适合用于少量文本,例如 URI 或类似的东西。

在不知道图像来自哪里的情况下,我猜测它们是保存在应用程序 /res 或缓存目录中某处的图像。

如果这是真的,我会说最好的选择(如果这些活动在同一个应用程序中)是传递图像在 Intent 中保存的位置。这样您就可以避免通过 Intent 对图像进行编码/解码。

如果这两个活动在不同的应用程序中。那么这几乎是 Content Provider 的规范用例。

这里还有另外两个问题试图做类似的事情Intent.putExtras 大小限制?Intent putExtra 方法的最大长度?(强制关闭) ,并按意图传递数据。如果您输入太多数据,两者都会导致系统挂起。我强烈建议不要将 Application 类用作第一个推荐的数据存储机制解决方案。非常糟糕的 Android 设计,可能会导致出现紧急错误。共享首选项(用于应用程序范围的设置)或用于文件传输的内容提供程序/本地缓存文件是一个更可靠的答案。

于 2013-09-25T11:36:12.993 回答
0

你有int position并且你有一个名为的集合Data

所以你可以使用:

String link =  Data.get(position).get(TAG_LINK_IMAGE);
于 2013-09-25T11:35:17.550 回答