2012-10-05 25 views
1

我的目標是通過Android設備檢索JSON。我用這個成功的代碼,是下列操作之一:與互聯網連接相關的Android異常

public JSONObject getJSONFromUrl(String url) { 

    // Making HTTP request 
    try { 
     // defaultHttpClient 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 

     HttpResponse httpResponse = httpClient.execute(httpPost); 
     HttpEntity httpEntity = httpResponse.getEntity(); 
     is = httpEntity.getContent();   

    } 

不幸的是,因爲我無法連接到interner成功地接受我在的HttpResponse線以下錯誤:

了java.lang.RuntimeException無法啓動活動componentinfo:android.os.Network

我在其他線程在這裏讀取Stackoverflow一個可能的解決方案,它將啓動一個新的線程。但我不知道該怎麼做。

P.S.我已經宣佈在AndroidManifest.xml即

<uses-permission android:name="android.permission.INTERNET" /> 
+0

如果你不能用你的異常連接到網絡上,什麼問題呢?只是以某種方式處理它 - 給用戶選擇重試等等。如果你在主UI線程上運行該代碼,你需要在Android上讀取異步編程。 ASyncTask是一個幫助器類,它爲你創建了一個新的線程,但是實際上你並不瞭解線程。看[這裏](http://developer.android.com/reference/android/os/AsyncTask.html)。您確實需要了解Java gereric的; o) – didster

+0

您是否嘗試將代碼嵌入到AsyncTask類中? – Apostolos

+0

我是android新手。所以不,我沒有嘗試。任何人都可以給出一些方向? –

回答

0

這裏上網權限線是一類我寫的從服務器(谷歌應用程序引擎)查詢數據時,它使一個連接,去和在線閱讀的東西。

public class QueryServer 
{ 
    public static final String URL = "http://10.0.2.2:8888/"; 

@SuppressWarnings("unused") 
private class GetXMLTask extends AsyncTask<String, Void, String> 
{ 
    @Override 
    protected String doInBackground(String... urls) 
    {   
     String output = null;   
     try 
     {    
      for (String url : urls) 
      {      
       output = getOutputFromUrl(url); 
       Log.d("Server Return", output); 
      }    
     } 
     catch(Exception e) 
     { 
      Log.d("Exception", e.getMessage()); 
     } 
     return output; 
    }   
    } 
    private String getOutputFromUrl(String url) 
    { 
     StringBuffer output = new StringBuffer(""); 
     try 
     { 
      InputStream stream = getHttpConnection(url); 
      BufferedReader buffer = new BufferedReader(new InputStreamReader(stream)); 
      String s = ""; 
      while ((s = buffer.readLine()) != null) 
      { 
       output.append(s); 
       output.toString(); 
      } 
     } 
     catch (IOException e1) 
     { 
      e1.printStackTrace(); 
     } 

     return output.toString(); 
    } 
    // Makes HttpURLConnection and returns InputStream 
    private InputStream getHttpConnection(String urlString) throws IOException 
    { 
     InputStream stream = null; 
     try 
     {     
      java.net.URL url = new java.net.URL(urlString); 
      URLConnection connection = url.openConnection();  
      HttpURLConnection httpConnection = (HttpURLConnection) connection; 
      httpConnection.setRequestMethod("GET"); 
      httpConnection.connect(); 

      if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) 
      { 
       stream = httpConnection.getInputStream(); 
      } 
     } 
     catch (Exception ex) 
     { 
      ex.printStackTrace(); 
     } 
     return stream; 
    } 
    protected void onPostExecute(String output) 
    { 

    } 
} 
+0

由於您使用的是JSON,因此將'getOutputFromUrl'方法聲明爲JSON而不是字符串......希望它可以幫助 – Ndupza

0

試試這個..

public JSONObject getJSONFromUrl(String url) { 
       JSONObject j = null; 
     // Making HTTP request 
     try { 
      // defaultHttpClient 
      HttpParams httpParameters = new BasicHttpParams(); 
      HttpClient httpClient = new DefaultHttpClient(httpParameters); 
      HttpPost httpPost = new HttpPost(url); 

      HttpResponse httpResponse = httpClient.execute(httpPost); 
      //HttpEntity httpEntity = httpResponse.getEntity(); 
      // is = httpEntity.getContent(); 
      j = new JSONObject(EntityUtils.toString(httpResponse.getEntity())); 

     }finally{ 
        return j; 
       } 
} 
+0

它不起作用。我仍然會例外 –