0

I have trouble opening an http connection in an Android app.

Here is my Android Studio code :

    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();
    }

My crash:

04-24 16:48:24.848 13860-13860/com.example.benas.testingpurposes E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.benas.testingpurposes, PID: 13860 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.benas.testingpurposes/com.example.benas.testingpurposes.MainActivity}: android.os.NetworkOnMainThreadException 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) at 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) at 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.main(ZygoteInit.java:1194) Caused by: android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147) at java.net.InetAddress.lookupHostByName(InetAddress.java:418) at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) at java.net.InetAddress.getAllByName(InetAddress.java:215) at com.android.okhttp.HostResolver$1.getAllByName(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) at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:361) at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:289) at com.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(MainActivity.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.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)  at 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.main(ZygoteInit.java:1194) 

I'm stuck with it, any help would be appreciated

Vic Seedoubleyew
  • 9,888
  • 6
  • 55
  • 76
Benas.M
  • 340
  • 5
  • 14
  • Use MySQLi prepared statements. Read this link http://php.net/manual/en/mysqli.quickstart.prepared-statements.php. Also escape your input data before inserting into database. http://php.net/manual/en/mysqli.real-escape-string.php – Sk_ Apr 24 '16 at 14:17

1 Answers1

0

So, I managed to solution to this problem. To fix this problem you need to run this code snippet on another thread. You are welcome :). Once again it was really silly mistake

Benas.M
  • 340
  • 5
  • 14
  • Bretty much. If you write your own custom ASyncTask that sets up the connection based on an url once you can copy paste it to future projects. The standard connection library has a host of problems though, you're better off with a more modern library like android's Volley for more futureproof connections. – G_V Apr 24 '16 at 16:42