2016-04-24 76 views
0

我無法在Android應用程序中打開http連接。打開http連接:android.os.NetworkOnMainThreadException

這裏是我的Android Studio代碼:

try { 
     String address = "http://example.com/test.php"; 
     URL url = new URL(address); 

     HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 
     httpURLConnection.setRequestMethod("POST"); 
     httpURLConnection.setDoOutput(true); 
     httpURLConnection.connect(); 

     //Crashes on this. 
     OutputStream OS = httpURLConnection.getOutputStream(); 
     ////////////////////////////////////////////////////// 

     BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(OS, "UTF-8")); 
     String data = URLEncoder.encode("x", "UTF-8") + "=" + URLEncoder.encode(String.valueOf(10), "UTF-8"); 

     bufferedWriter.write(data); 
     bufferedWriter.flush(); 
     bufferedWriter.close(); 
     OS.close(); 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

我崩潰:

04-24 16:48:24.848 13860-13860/com.example.benas.testingpurposes E/AndroidRuntime:致命例外:main 進程:com.example.benas.testingpurposes,PID:13860 java.lang.RuntimeException:無法啓動活動ComponentInfo {com.example.benas.testingpurposes/com.example.benas.testingpurposes.MainActivity}: android.os.NetworkOnM ainThreadException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2658) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723) at android.app.ActivityThread.access $ 900(ActivityThread.java:172)在Android.app.ActivityThread處使​​用$ H.handleMessage(ActivityThread.java:1422) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5832) at java.lang.reflect.Method.invoke(Native Method) 在java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1399) at com.android.internal.os.ZygoteInit 。主要(ZygoteInit.java:1194) 產生的原因:在java.net.InetAddress.lookupHostByName(InetAddress.java在android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147) android.os.NetworkOnMainThreadException : (InetAddress.java:215) at com.android.okhttp.HostResolver $ 1.getAll() ByName(HostResolver.java:29) at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:232) at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java: 124) 在com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:361) 在com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:289) 在融爲一體。 android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373) at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106) at com.example.benas.testingpurposes。 MainActivity.onCreate(馬inActivity.java:34) at android.app.Activity.performCreate(Activity.java:6221) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) at android.app.ActivityThread.performLaunchActivity(ActivityThread。 java:2611) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723) at android.app.ActivityThread.access $ 900(ActivityThread.java:172) at android.app.ActivityThread $ H.handleMessage(ActivityThread 。(android.app.ActivityThread.main(ActivityThread.java:java:1422) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main 5832) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1399) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

I」米堅持下去,任何幫助,將不勝感激

+0

使用MySQLi準備語句。 閱讀此鏈接http://php.net/manual/en/mysqli.quickstart.prepared-statements.php。 在插入數據庫之前也要跳過輸入數據。 http://php.net/manual/en/mysqli.real-escape-string.php –

回答

0

所以,我設法解決這個問題。 要解決此問題,您需要在另一個線程上運行此代碼段。 不客氣:)。再次,它真的很愚蠢的錯誤

+0

Bretty很多。如果您編寫自己的自定義ASyncTask,您可以將其複製粘貼到未來的項目中,從而基於URL設置連接。標準的連接庫雖然有很多問題,但最好還是使用像android的Volley這樣更現代的庫,以獲得更多未來連接。 –