2015-02-24 31 views
1

我有我的Android項目的問題,的Android HttpURLConnection的錯誤

我想打電話給PHP頁面get方法,我使用HttpURLConnection類, 當我運行這個應用程序給出一個錯誤「應用程序已停止」

這是我的代碼

public void someFunction() throws IOException { 

      String inputLine = ""; 

    URL url = new URL("http://www.domain.com/demo.php?test=abc"); 
      HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 

      InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 
      try { 
       BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
       StringBuilder result = new StringBuilder(); 
       String line; 
       while((line = reader.readLine()) != null) { 
        result.append(line); 
       } 

      } finally{ 
        in.close(); 
       } 
} 

我應該怎麼辦?

謝謝。

+0

如果使用捕捉,而不是扔那麼你可以隨時打印異常跟蹤和了解應用程序退出的原因。 – 2015-02-24 01:01:22

+0

讓我猜,又一個NOMTE的問題 – Selvin 2015-02-24 01:05:12

+0

NOMTE = NetworkOnMainThreadException – samgak 2015-02-24 01:13:39

回答

3

我已經解決了這個問題,用下面的代碼,

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
+0

謝謝你!你已經救了我3個小時! – 2016-02-09 17:57:28

+0

非常感謝。 – iqbalsyamsu 2016-07-14 12:44:05

0

Android是建立抵制開發商,使主(UI)線程網絡請求。更改線程策略不是解決方案。你應該使用AsyncTask來完成所有的網絡請求。

public void someFunction() throws IOException { 

    AsyncTask task = new AsyncTask<Void,StringBuilder,StringBuilder>() { 
     @Override 
     protected StringBuilder doInBackground(Void... params) { 

String inputLine = ""; 

URL url = new URL("http://www.domain.com/demo.php?test=abc"); 
     HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 

     InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 
     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
      StringBuilder result = new StringBuilder(); 
      String line; 
      while((line = reader.readLine()) != null) { 
       result.append(line); 
      } 

     } finally{ 
       in.close(); 
      } 

      return result; 
     } 


     @Override 
     protected void onPostExecute(StringBuilder result) { 
      super.onPostExecute(o); 

     } 
    }; 
    task.execute(); 

} 

請參閱Android文檔:http://developer.android.com/reference/android/os/AsyncTask.html

相關問題