I have a android application that needs to make a get request to a webpage. My Codes compile and run without any problems but asap i want to make that call my program stop respond

Here is my code

public void Check_Login()
{
    HttpURLConnection connection = null;
    try {
        String link = "http://mobirep.co.za/server_scripts/check_login/check_login.php?username=andre&password=aaa";
        URL url = new URL(link);
        connection = (HttpURLConnection) url.openConnection();
        connection.connect();
        InputStream is = connection.getInputStream();
        int buffer;
        while((buffer = is.read()) != -1)
        {
           System.out.print(buffer);
            TextView tx = (TextView)findViewById(R.id.lblName);
            tx.setText(buffer);
        }

    } catch (MalformedURLException e1) {
        e1.printStackTrace();
    } catch (IOException e1) {
        e1.printStackTrace();
    } finally {
        if(null != connection) { connection.disconnect(); }
    }

Here is my log:

05-13 08:13:59.607: I/Choreographer(891): Skipped 115 frames!  The application may be doing too much work on its main thread.
05-13 08:13:59.627: D/gralloc_goldfish(891): Emulator without GPU emulation detected.
05-13 08:14:00.048: I/Choreographer(891): Skipped 50 frames!  The application may be doing too much work on its main thread.
05-13 08:14:15.078: D/AndroidRuntime(891): Shutting down VM
05-13 08:14:15.078: W/dalvikvm(891): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
05-13 08:14:15.138: E/AndroidRuntime(891): FATAL EXCEPTION: main
05-13 08:14:15.138: E/AndroidRuntime(891): android.os.NetworkOnMainThreadException
05-13 08:14:15.138: E/AndroidRuntime(891):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
05-13 08:14:15.138: E/AndroidRuntime(891):  at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
05-13 08:14:15.138: E/AndroidRuntime(891):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
05-13 08:14:15.138: E/AndroidRuntime(891):  at java.net.InetAddress.getAllByName(InetAddress.java:214)
05-13 08:14:15.138: E/AndroidRuntime(891):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
05-13 08:14:15.138: E/AndroidRuntime(891):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
05-13 08:14:15.138: E/AndroidRuntime(891):  at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
05-13 08:14:15.138: E/AndroidRuntime(891):  at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
05-13 08:14:15.138: E/AndroidRuntime(891):  at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
05-13 08:14:15.138: E/AndroidRuntime(891):  at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
05-13 08:14:15.138: E/AndroidRuntime(891):  at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
05-13 08:14:15.138: E/AndroidRuntime(891):  at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
05-13 08:14:15.138: E/AndroidRuntime(891):  at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
05-13 08:14:15.138: E/AndroidRuntime(891):  at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)
05-13 08:14:15.138: E/AndroidRuntime(891):  at com.appmobirep.MainActivity.Check_Login(MainActivity.java:70)
05-13 08:14:15.138: E/AndroidRuntime(891):  at com.appmobirep.MainActivity$1.onClick(MainActivity.java:35)
05-13 08:14:15.138: E/AndroidRuntime(891):  at android.view.View.performClick(View.java:4204)
05-13 08:14:15.138: E/AndroidRuntime(891):  at android.view.View$PerformClick.run(View.java:17355)
05-13 08:14:15.138: E/AndroidRuntime(891):  at android.os.Handler.handleCallback(Handler.java:725)
05-13 08:14:15.138: E/AndroidRuntime(891):  at android.os.Handler.dispatchMessage(Handler.java:92)
05-13 08:14:15.138: E/AndroidRuntime(891):  at android.os.Looper.loop(Looper.java:137)
05-13 08:14:15.138: E/AndroidRuntime(891):  at android.app.ActivityThread.main(ActivityThread.java:5041)
05-13 08:14:15.138: E/AndroidRuntime(891):  at java.lang.reflect.Method.invokeNative(Native Method)
05-13 08:14:15.138: E/AndroidRuntime(891):  at java.lang.reflect.Method.invoke(Method.java:511)
05-13 08:14:15.138: E/AndroidRuntime(891):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-13 08:14:15.138: E/AndroidRuntime(891):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-13 08:14:15.138: E/AndroidRuntime(891):  at dalvik.system.NativeStart.main(Native Method)
05-13 08:19:15.257: I/Process(891): Sending signal. PID: 891 SIG: 9

Can you please help me on this error =)

有帮助吗?

解决方案

the problem is detailed on this line:

05-13 08:14:15.138: E/AndroidRuntime(891): android.os.NetworkOnMainThreadException

"Network on Main thread exception". That means, you cannot make any network calls in the UI thread, because if you do, the UI stops updating.

What you have to do is to use some type of threading approach. A common one in Android is the AsyncTask: http://developer.android.com/reference/android/os/AsyncTask.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top