2016-04-24 19 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(); 
    } 

私のクラッシュ:

4月24日16:48:24.848 13860から13860/E/AndroidRuntime com.example.benas.testingpurposes:重大な例外:メイン プロセス:com.example.benas.testingpurposes、PID:13860 java.lang.RuntimeException:アクティビティを開始できませんComponentInfo {com.example.benas.testingpurposes/com.example.benas.testingpurposes.MainActivity}: android.os.NetworkOnM android.app.ActivityThread.access $ 900からandroid.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723) でandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:2658) でainThreadException (ActivityThread.java:172) android.os.Looper.loop(Looper.java:145)の とandroid.app.ActivityThread $ H.handleMessage(ActivityThread.java:1422) (android.os.Handler.dispatchMessage(Handler.java:102) ) android.app.ActivityThread.main(ActivityThread.java:5832)の のjava.lang.reflect.Method.invoke(ネイティブメソッド) java.lang.reflect.Method.invoke(Method.java:372) com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1399) at com.android.internal.os.ZygoteInit .main(ZygoteInit.java:1194)によって引き起こさ :java.net.InetAddress.lookupHostByNameでandroid.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147) (InetAddress.javaでandroid.os.NetworkOnMainThreadException 418) at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) java.net.InetAddress.getAllByName(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: com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:361)COMでcom.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:289) においてにおける124) 。 android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373) com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106) com.example.benas.testingpurposesです。 MainActivity.onCreate(Ma inActivity.java:34)android.app.ActivityThread.performLaunchActivityでandroid.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) (ActivityThreadでandroid.app.Activity.performCreate(Activity.java:6221) で。 java:2611) android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723) (android.app.ActivityThread.access)$ 900(ActivityThread.java:172) (android.app.ActivityThread)$ H.handleMessage(ActivityThread 。java:1422) android.os.Handler.dispatchMessage(Handler.java:102) (android.os.Looper.loop(Looper.java:145) android.app.ActivityThread.main(ActivityThread.java: 5832) at java.lang.reflect.Method.invoke(ネイティブメソッド) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run com.android.internal.os.ZygoteInit.mainで(ZygoteInit.java:1399) (ZygoteInit.java:1194)

私は」何か助けていただければ幸いです。

+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 much。 URLに基​​づいて接続を設定する独自のカスタムASyncTaskを作成すると、それをコピーして将来のプロジェクトに貼り付けることができます。標準的な接続ライブラリにはいくつかの問題がありますが、将来的な接続のために、AndroidのVolleyのようなより現代的なライブラリを使う方がよいでしょう。 –

関連する問題