2011-11-13 47 views
1

我从服务器下载JSON数据,我想将它们保存在Android手机中的文件。保存JSON对象到一个文件在手机

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

//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

JSON的需求,以从中获取的信息进行解析。因此,每次需要从中获取信息时,保存JSON请求并解析它通常是一个糟糕的主意。

相反,你要分析它一次,得到您想要的信息,并保存它们的地方,你可以很容易地访问它们。在哪里以及如何保存它们与您想要使用它的方式不同:

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

此外,你说你想将这些东西存储在外部存储上。一般来说:将属于您的应用程序的东西存储在外部存储上是一个坏主意。然而,有一些情况下是有意义的:

  • 你的应用程序想要的共享某些事情(和你不希望使用ContentProvider
  • 你的应用程序需要大量文件的哪些不能存储在内部存储器中。

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

在上述其他情况下,use the internal storage是个好主意。

1

您可以使用内部存储为好,但如果你谈论的是大量的数据和大量的搜索,使用SQLite database,集成在Android平台。