2011-04-04 119 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; 

    } 

}