2013-11-24 109 views
0

我試圖建立一個Android應用程序與服務器的Heroku作爲後端。我試圖通過一個heroku URL將字符串作爲字符串。Android的HTTP客戶端引發異常

這裏的鏈接將JSON字符串

http://le-wild-pesit.herokuapp.com/peeps/

和URL的內容是

[{ 「窺視」:{ 「時代」:空, 「created_at」: 「2013-11-23T08:58:09Z」, 「ID」:1, 「名」 空 「的updated_at」: 「2013-11-23T08:58:09Z」}},{ 「窺視」 :{ 「時代」:空, 「created_at」: 「2013-11-23T08:59:30Z」, 「ID」:2, 「名」 空 「的updated_at」:「2013-11-23T08:59:30Z 「}}]

這裏是我的代碼:

//imports go here 
public class JSONParser 
{ 

public String getJSONFromUrl(String url) 
{ 

    InputStream inpstr = null; 
    String result = ""; 
    HttpResponse response = null; 

    // HTTP 
    try , 
    {   
     HttpClient httpclient = new DefaultHttpClient(); 
     try 
     { 
      response = httpclient.execute(new HttpGet(url)); 
      } 
     catch(Exception e) 
     { 
      return "dafuq?!"; 
     } 
     HttpEntity entity = response.getEntity(); 
     inpstr = entity.getContent(); 
    } 
    catch(Exception e) 
    { 
     return "SHIT!"; 
    } 

    // Code to get string from input stream 

return result; 

} 

} 

當我運行這段代碼,我得到的回報是

「dafuq?!」

所以我假設我有

響應麻煩= httpclient.execute(新HTTPGET(URL));

我一直在修補2天的代碼,我一直無法弄清楚什麼是錯的。請幫助我。

謝謝!

+0

請發佈logcat輸出,否則它將很難幫助你。 –

+0

@CompuChip你說得對。我錯過了INTERNET的許可。這固定了一切。謝謝! –

回答

1

請確保你給INTERNET允許您的應用程序,請參閱如何做到這一點this SO question

順便說明,我會建議增加一些更具體的錯誤消息,你的代碼,看看e.getMessage()例如。

1

所有網絡操作的首先應該是異步的,使用的AsyncTask這一點。其次我建議使用日誌功能進行錯誤處理。在這裏工作的代碼(的getJSON()是進入功能):

public void getJSON() { 
    String[] strings = new String[]{"http://le-wild-pesit.herokuapp.com/peeps/"}; 
    new AsyncJSONTask().execute(strings); 
} 


public JSONArray getJSONFromUrl(String url) { 
    String resultString; 
    HttpResponse response; 
    JSONArray jsonArray = null; 
    try { 
     HttpClient httpclient = new DefaultHttpClient(); 
     response = httpclient.execute(new HttpGet(url)); 
     HttpEntity entity = response.getEntity(); 
     resultString = EntityUtils.toString(entity); 
     jsonArray = new JSONArray(resultString); 
    } catch (Exception e) { 
     Log.e("SOME_TAG", Log.getStackTraceString(e)); 
    } 
    return jsonArray; 
} 

private class AsyncJSONTask extends AsyncTask<String, Void, JSONArray> { 

    @Override 
    protected JSONArray doInBackground(String... params) { 
     String url = params[0]; 
     return getJSONFromUrl(url); 
    } 

    @Override 
    protected void onPostExecute(JSONArray jsonArray) { 
     super.onPostExecute(jsonArray); 
     //Here you do your work with JSON 
    } 
}