0

I want to run a php script located on a web server from my android app. this is the code

try {
    URL url = new URL("http://www.xxx.com/add.php");     
    URLConnection con = url.openConnection();
    con.setDoOutput(true);
    PrintStream out = new PrintStream(con.getOutputStream());
    con.getInputStream();
    System.out.print("asdad ");
    out.close();
} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

This code is running well when used inside a simple java application, but it results error when used inside android app. I used the permission inside manifest:

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

Errors:

04-22 17:10:37.421: E/AndroidRuntime(4518): FATAL EXCEPTION: main

04-22 17:10:37.421: E/AndroidRuntime(4518): java.lang.IllegalStateException: Could not execute method of the activity

04-22 17:10:37.421: E/AndroidRuntime(4518):     at android.view.View$1.onClick(View.java:3758)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at android.view.View.performClick(View.java:4377)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at android.view.View$PerformClick.run(View.java:18031)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at android.os.Handler.handleCallback(Handler.java:725)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at android.os.Handler.dispatchMessage(Handler.java:92)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at android.os.Looper.loop(Looper.java:137)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at 
android.app.ActivityThread.main(ActivityThread.java:5306)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at java.lang.reflect.Method.invokeNative(Native Method)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at java.lang.reflect.Method.invoke(Method.java:511)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at dalvik.system.NativeStart.main(Native Method)

04-22 17:10:37.421: E/AndroidRuntime(4518): Caused by: java.lang.reflect.InvocationTargetException

04-22 17:10:37.421: E/AndroidRuntime(4518):     at java.lang.reflect.Method.invokeNative(Native Method)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at java.lang.reflect.Method.invoke(Method.java:511)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at android.view.View$1.onClick(View.java:3753)

04-22 17:10:37.421: E/AndroidRuntime(4518):     ... 11 more

04-22 17:10:37.421: E/AndroidRuntime(4518): Caused by: android.os.NetworkOnMainThreadException

04-22 17:10:37.421: E/AndroidRuntime(4518):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1128)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at java.net.InetAddress.lookupHostByName(InetAddress.java:385)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at java.net.InetAddress.getAllByName(InetAddress.java:214)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:197)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at com.example.tmapp.User.AddToDatabase(User.java:79)

04-22 17:10:37.421: E/AndroidRuntime(4518):     at com.example.tmapp.Registration.reg(Registration.java:85)

04-22 17:10:37.421: E/AndroidRuntime(4518):     ... 14 more
5
  • 1
    whats the error you are getting ? Commented Apr 22, 2014 at 14:05
  • 1
    Could you provide an error stack-trace? Commented Apr 22, 2014 at 14:05
  • NetworkOnMainThreadException -- You should executed your code using an Asynctask (in this case is the right way) not in the Main thread Commented Apr 22, 2014 at 14:15
  • thanks but I'm new to android how to use AsyncTask? Commented Apr 22, 2014 at 14:18
  • read this: developer.android.com/reference/android/os/AsyncTask.html @user3066678 Commented Apr 22, 2014 at 14:19

1 Answer 1

1

Since Android 3.0 (Honeycomb) network connections can't be done on main thread. You have to use AsyncTask or other methods of concurrency.

Read this manual page on network connections.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.