使用HashMap创建ListView - 使用本地JSON文件

时间:2013-12-04 20:38:27

标签: android json listview hashmap

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):at android.content.res.AssetManager.openAsset(Native Method) 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):at com.example.myjsonproject.MainActivity.loadJSONFromAsset(MainActivity.java:78) 12-04 22:00:53.796:W / System.err(2093):at com.example.myjsonproject.MainActivity.buildData(MainActivity.java:44) 12-04 22:00:53.796:W / System.err(2093):at 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)

谢谢。

1 个答案:

答案 0 :(得分:0)

以下是您可以尝试的内容:

JSONObject jj = new JSONObject(loadJSONFromAsset());

            JSONArray jsonArray = jj.getJSONArray("pokemon");

            for(int i = 0; i< jsonArray.length();i++) {
                JSONObject ii = jsonArray.getJSONObject(i);

                list.add(putData(ii.getString("Name"),   ii.getString("Entry")));

            }

阅读json的功能

public String loadJSONFromAsset() {
                InputStream is = getApplicationContext().getAssets().open("pokelist.json");
        int size = is.available();
        buffer = new byte[size];
        is.read(buffer);
        is.close();
        String bufferString = new String(buffer);
            return bufferString ;
}

从这些行中可以清楚地看到项目的assets文件夹中缺少文件。

12-04 22:00:53.652: E/Trace(2093): error opening trace file: No such file or directory (2) 12-04 22:00:53.712: W/System.err(2093): java.io.FileNotFoundException: pokelist.json 12-04 22:00:53.763: