2011-04-04 113 views
0

我在解析Android上的JSON时出错。任何人都可以帮忙吗? 这是我的JSON方法:Android:解析JSON时出错

void examineJSONFile() 
    { 
     try 
     { 
      //String x = ""; 
      String y = ""; 
      InputStream is = this.getResources().openRawResource(R.raw.utf); 
      Writer writer = new StringWriter(); 
      char[] buffer = new char[1024]; 

      try { 
       BufferedReader reader = new BufferedReader(
       new InputStreamReader(is, "UTF-8") 
      ); 
       int n; 
       while ((n = reader.read(buffer)) != -1) { 
       writer.write(buffer, 0, n); 
       } 
      } finally { 
       is.close(); 
      } 

      String jsontext = writer.toString(); 
      JSONArray entries = new JSONArray(jsontext); 


      int j; 
      for (j=0;j<entries.length();j++) 
      { 
       JSONObject post = entries.getJSONObject(j); 
       y += post.getString("description") + "\n"; 
      } 
      txt_beschreibung.setText(y); 
     } 
     catch (Exception je) 
     { 
      txt_beschreibung.setText("Error w/file: " + je.getMessage()); 
     } 

    } 

这是我的JSON文件的样本:

[{ 
    "title": "CARE Deutschland-Luxemburg e.V.", 
    "keyword": "CARE", 
    "description": "<p><b>Das CARE-Komplett-Paket für Menschen in Not</b></p><p>Schnell, nachhaltig und durchdacht, das ist das moderne CARE-Paket. CARE ist überzeugt, dass umfassende Hilfe von drei Seiten notwendig ist, um die weltweite Armut Schritt für Schritt zu verringern. Deswegen hat CARE sich seit seiner Gründung 1945 und dem Abwurf der ersten CARE-Pakete über Berlin weiter entwickelt. Heute steckt im CARE-Paket weit mehr als Zucker und Mehl. Heute bietet die Organisation in 70 der ärmsten Länder der Welt ein Komplett-Paket für Menschen in Not.</p><p><b>Das Komplett-Paket für Menschen in Not enthält:</b></p>*sofortige Nothilfe nach Katastrophen<br><br>*langfristige Entwicklungszusammenarbeit<br><br>*Schutz der Menschenrechte<br><br>", 
    "smallImageUrl": "http://cdn.spendino.de/web/img/projects/home/1284113658.jpg", 
    "bigImageUrl":"http://cdn.spendino.de/web/img/projects/small/1284113658.jpg", 
    "cost": "5" 
    }, 
    { 
    "title": "Brot für die Welt", 
    "keyword": "BROT", 
    "description": "<p>„Brot für die Welt“ unterstützt unter der Maßgabe 'Helfen, wo die Not am größten ist' ausgewählte Projekte weltweit.</p><p>Von Angola bis Tansania, von der Förderung von Mahlzeiten bis zur gesundheitlichen Grundversorgung und Katastrophenhilfe.</p><p>Bei ihrem täglichen Kampf gegen Krankheiten, Hunger, Ungerechtigkeiten und Armut wird die Aktion „Brot für die Welt“ von der evangelischen Kirche unterstützt.</p><p>Die Aktion hat es sich zum Ziel gesetzt, die Entwicklungszusammenarbeit auf der ganzen Welt zu fördern und Hilfe zur Selbsthilfe zu leisten.</p>", 
    "smallImageUrl": "http://cdn.spendino.de/web/img/projects/home/1267454286.jpg", 
    "bigImageUrl":"http://cdn.spendino.de/web/img/projects/small/1267454286.jpg", 
    "cost": "5" 
    }] 

这是错误截图:

http://img687.imageshack.us/img687/497/scrshtq.jpg

+0

你能在这里发表您'jsontext'字符串(至极你之前'JSONArray项=新JSONArray(jsontext)获得;') – 2011-04-04 09:57:10

+0

我没有任何,我只是有这个InputStream为= this.getResources ().openRawResource(R.raw.utf); 所以它会从JSON文件读取数据(原始数据) – hectichavana 2011-04-04 10:44:18

+0

在构建jsonObject之前记录jsontext var,这将帮助您追踪问题。 – 2011-04-04 10:56:44

回答

0

simple code from JavaCodeGeeks将解析JSON精美(见下文)。至于为什么你的代码不工作,我不知道。

public class JsonParsingActivity extends Activity { 

    String url = "http://search.twitter.com/search.json?q=javacodegeeks"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     InputStream source = retrieveStream(url); 

     Gson gson = new Gson(); 

     Reader reader = new InputStreamReader(source); 

     SearchResponse response = gson.fromJson(reader, SearchResponse.class); 

     Toast.makeText(this, response.query, Toast.LENGTH_SHORT).show(); 

     List<Result> results = response.results; 

     for (Result result : results) { 
      Toast.makeText(this, result.fromUser, Toast.LENGTH_SHORT).show(); 
     } 

    } 

    private InputStream retrieveStream(String url) { 

     DefaultHttpClient client = new DefaultHttpClient(); 

     HttpGet getRequest = new HttpGet(url); 

     try { 

      HttpResponse getResponse = client.execute(getRequest); 
      final int statusCode = getResponse.getStatusLine().getStatusCode(); 

      if (statusCode != HttpStatus.SC_OK) { 
       Log.w(getClass().getSimpleName(), 
        "Error " + statusCode + " for URL " + url); 
       return null; 
      } 

      HttpEntity getResponseEntity = getResponse.getEntity(); 
      return getResponseEntity.getContent(); 

     } 
     catch (IOException e) { 
      getRequest.abort(); 
      Log.w(getClass().getSimpleName(), "Error for URL " + url, e); 
     } 

     return null; 

    } 

}