2012-03-05 33 views
0

我想如下執行該JSON電話:JSON調用無效(Android)

button.setOnClickListener(new OnClickListener() { 

      @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      HttpClient client = new DefaultHttpClient(); 
      HttpGet get = new HttpGet("http://www.google.com/dictionary/json?callback=dict_api.callbacks.id100&q=insouciant&sl=en&tl=en"); 
      ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
      String responseBody = null; 
      try{ 
       responseBody = client.execute(get, responseHandler); 
      }catch(Exception ex) { 
       ex.printStackTrace(); 
      } 
      JSONObject jsonObject = null; 
      JSONParser parser=new JSONParser(); 

      try { 
       Object obj = parser.parse(responseBody); 
       jsonObject=(JSONObject)obj; 
       System.out.println("JSONRESPONSE getCardsFromTagNames="+jsonObject); 

      }catch(Exception ex){ 
       Log.v("TEST","Exception: " + ex.getMessage()); 
      } 
     } 
    }); 

不幸的是,返回的結果爲空。我究竟做錯了什麼?謝謝!

+1

剛擡起頭,任何網絡I/O應該是在一個單獨的線程中完成的,而不是在用戶界面線。 – SeanPONeil 2012-03-05 18:50:54

回答

1

您的結果回來包裝在一個函數中用於回調(dict_api.callbacks.id100)。鑑於如果您省略回調,此API似乎不會返回任何內容,您必須獲取結果字符串,並解析出json部分,然後將其傳遞給您的json解析器。

+0

感謝jbowes。你可以用一個例子來解釋一下嗎? – OckhamsRazor 2012-03-05 18:55:26

+0

好的,我認爲我明白了你的意思。謝謝! – OckhamsRazor 2012-03-05 19:02:53

2

resultBody包含通常由某個JavaScript調用的回調函數(JSONP)。

當你不需要這個功能,你可以很容易地剝去它是這樣的:

HttpGet get = new HttpGet("http://www.google.com/dictionary/json?callback=a&q=insouciant&sl=en&tl=en"); 
ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
String responseBody = null; 
try{ 
    responseBody = client.execute(get, responseHandler); 
    responseBody = responseBody.substring(2, responseBody.length()-3); 
}catch(Exception ex) { 
    ex.printStackTrace(); 
}