【发布时间】:2013-12-04 20:38:26
【问题描述】:
public class MainActivity extends ListActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ArrayList<Map<String, String>> list = buildData();
String[] from = { "Name", "Entry" };
int[] to = { android.R.id.text2, android.R.id.text1 };
SimpleAdapter adapter = new SimpleAdapter(this, list,
android.R.layout.simple_list_item_2, from, to);
setListAdapter(adapter);
}
private ArrayList<Map<String, String>> buildData() {
ArrayList<Map<String, String>> list =
new ArrayList<Map<String, String>>();
list.add(putData("Bulbasaur", "001"));
list.add(putData("Ivysaur", "002"));
list.add(putData("Venusaur", "003"));
return list;
}
private HashMap<String, String> putData(String name, String entry) {
HashMap<String, String> item = new HashMap<String,
String>();
item.put("Name", name);
item.put("Entry", entry);
return item;
}
我的目标是在上面列出的 putData 或 buildData 类中添加 JSON 引用。我有另一个类(如下),我将使用它来引用本地存储的 JSON 文件。
public String loadJSONFromAsset() {
String json = null;
try {
InputStream is = getAssets().open("pokelist.json");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
json = new String(buffer, "UTF-8");
} catch (IOException ex) {
ex.printStackTrace();
return null;
}
return json;
}
我遇到的问题是,无论我做什么,JSON 文件中的数据都不会显示在 ListActivity 中。我知道 ListActivity 有效,但我不完全确定应该如何使用 JSON 文件中的数据实现 HashMap。
谁能给我一些指导。 请不要提供链接;我整天都在到处寻找有关此事的某种形式的例子,但无济于事。 我可以使用一些我能理解的帮助。
澄清 我想要做的是从 HDD 加载 JSON 文件,并将键值放入 HashMap;然后将显示在我的 ListView(列表)中。
JSON 代码:
{
"pokemon": [
{"Entry":"001",
"Name":"Bulbasaur", "Type":"1"},
{"Entry":"002",
"Name":"Ivysaur" , "Type":"1"},
{"Entry":"003",
"Name":"Venusaur", "Type":"1"}
]
}
最近的日志消息
12-04 22:00:53.652:E/Trace(2093):打开跟踪文件时出错:没有这样的文件或目录 (2) 12-04 22:00:53.712: W/System.err(2093): java.io.FileNotFoundException: pokelist.json 12-04 22:00:53.763:W/System.err(2093):在 android.content.res.AssetManager.openAsset(本机方法) 12-04 22:00:53.763: W/System.err(2093): 在 android.content.res.AssetManager.open(AssetManager.java:315) 12-04 22:00:53.796: W/System.err(2093): 在 android.content.res.AssetManager.open(AssetManager.java:289) 12-04 22:00:53.796: W/System.err(2093): 在 com.example.myjsonproject.MainActivity.loadJSONFromAsset(MainActivity.java:78) 12-04 22:00:53.796: W/System.err(2093): 在 com.example.myjsonproject.MainActivity.buildData(MainActivity.java:44) 12-04 22:00:53.796: W/System.err(2093): 在 com.example.myjsonproject.MainActivity.onCreate(MainActivity.java:27) 12-04 22:00:53.796: W/System.err(2093): 在 android.app.Activity.performCreate(Activity.java:5104) 12-04 22:00:53.796: W/System.err(2093): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 12-04 22:00:53.796: W/System.err(2093): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 12-04 22:00:53.796: W/System.err(2093): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 12-04 22:00:53.796: W/System.err(2093): 在 android.app.ActivityThread.access$600(ActivityThread.java:141) 12-04 22:00:53.803: W/System.err(2093): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 12-04 22:00:53.836: W/System.err(2093): 在 android.os.Handler.dispatchMessage(Handler.java:99) 12-04 22:00:53.836: W/System.err(2093): 在 android.os.Looper.loop(Looper.java:137) 12-04 22:00:53.836: W/System.err(2093): 在 android.app.ActivityThread.main(ActivityThread.java:5041) 12-04 22:00:53.836: W/System.err(2093): at java.lang.reflect.Method.invokeNative(Native Method)
谢谢。
【问题讨论】:
-
澄清一下:你想从磁盘加载一个 JSON 文件,读入它的值,然后将它的 key:value 对放入 HashMap,对吗?
-
你能把json内容粘贴到这里吗,因为json需要转换成JsonArray对象然后迭代该数组来构建hashmap列表。
-
@mttdbrd 是的,这正是我想要做的。我现在会更新我的帖子。
标签: android json listview hashmap