将json对象保存到手机中的文件中

时间:2011-11-13 13:00:00

标签: java android json

我从服务器下载json数据,我想将它们保存到android mobile中的文件中。

如何使用外部存储?当我保存它们时,我还想在文件中搜索特定数据。有没有比外部存储更好的方法呢?

//parse json data
try{
    JSONArray jArray = new JSONArray(result);
    JSONObject json_data = null;
    category = new String[jArray.length()];
    name = new String[jArray.length()];
    date = new String[jArray.length()];
    content = new String[jArray.length()];

    for(int i=0;i<jArray.length()+2;i++){
        HashMap<String, String> map = new HashMap<String, String>();

        if(i==0){ 
            if(category8 == "All"){
                map.put("id",  "5");
                map.put("name", "              All Posts");
                map.put("latitude", "");
                map.put("longitude", "");
                map.put("date", "");
                map.put("content", "");
                mylist.add(map);
            } else {
                json_data = jArray.getJSONObject(i);

                category[i] = json_data.getString("category");
                map.put("id",  "5");
                map.put("name", "              "+category[i]);
                map.put("latitude", "");
                map.put("longitude", "");
                map.put("date", "");
                map.put("content", "");
                mylist.add(map);
            }
        } else if(i<jArray.length()+1) {
            json_data = jArray.getJSONObject(i-1);

            id = json_data.getInt("post_id");
            name[i-1] = json_data.getString("username");
            latitude = json_data.getDouble("latitude");
            longitude = json_data.getDouble("longitude");
            date[i-1] = json_data.getString("post_date");
            content[i-1] = json_data.getString("post_content");

            map.put("id",  String.valueOf(id));
            map.put("name", name[i-1] + " wrote:");
            map.put("latitude", "Latitude: " + latitude);
            map.put("longitude", "Longitude: " + longitude);
            map.put("date", "Date: " + date[i-1]);
            map.put("content", content[i-1]);
            mylist.add(map);
        }

        if(i==jArray.length()+1) {
            map.put("id",  "5");
            map.put("name", "");
            map.put("latitude", "");
            map.put("longitude", "");
            map.put("date", "");
            map.put("content", "");
            mylist.add(map);
        }
     }
} catch(JSONException e1) {
    Toast.makeText(getBaseContext(), "No posts found" ,Toast.LENGTH_LONG).show();
} catch (ParseException e1) {
    e1.printStackTrace();
}

2 个答案:

答案 0 :(得分:2)

需要解析JSON才能从中获取信息。因此,保存JSON-Request并在每次需要信息时解析它通常都是一个坏主意。

相反,您需要解析一次,获取所需信息,并将其保存在您可以轻松访问的位置。保存它们的位置和方式与您想要使用它的方式不同:

  • 如果您计划广泛搜索或只需要其中的某些部分信息,那么数据库应该是您的最佳选择。
  • 否则,如果您只想存储几个值,则可能需要选择更简单的格式来更快地解析它(如CSV)。

另外,你说你想把这些东西存放在外部存储器上。一般来说:在外部存储上存储属于您的应用程序的东西是个坏主意。然而,有些情况下它是有道理的:

  • 您的应用想要分享某些内容(而且您不想使用ContentProvider
  • 您的应用需要大量无法存储在内部存储空间中的文件。

请记住,可以操纵保存在外部存储设备上的每个文件!此外,您不能依赖外部存储,因为有些用户可能没有。

在上面列出的其他情况下,use the internal storage更好。

答案 1 :(得分:1)

您也可以使用内部存储空间,但如果您正在谈论大量数据和大量搜索,请使用集成在Android平台中的SQLite database