2013-12-11 122 views
1

因此,通常我可以通过查看错误日志来了解发生了什么。大多数时候,它给了我一个线路号码,我可以从那里看出来。Logcat错误我不明白

但现在,我迷路了。我不明白我的代码有问题。

我不知道哪里可以解决这个错误。我不要求任何讲义或代码修正,所以我没有表现出我的代码还没有,我只是想搞清楚这个错误的一些技巧:

12-10 17:12:20.359: E/AndroidRuntime(14072): FATAL EXCEPTION: main 
12-10 17:12:20.359: E/AndroidRuntime(14072): android.os.NetworkOnMainThreadException 
12-10 17:12:20.359: E/AndroidRuntime(14072): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at java.net.InetAddress.getAllByName(InetAddress.java:214) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at com.sencide.AndroidLogin.postLoginData(AndroidLogin.java:101) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at com.sencide.AndroidLogin.onClick(AndroidLogin.java:153) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at android.view.View.performClick(View.java:4211) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at android.view.View$PerformClick.run(View.java:17362) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at android.os.Handler.handleCallback(Handler.java:725) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at android.os.Handler.dispatchMessage(Handler.java:92) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at android.os.Looper.loop(Looper.java:137) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at android.app.ActivityThread.main(ActivityThread.java:5227) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at java.lang.reflect.Method.invokeNative(Native Method) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at java.lang.reflect.Method.invoke(Method.java:511) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 
12-10 17:12:20.359: E/AndroidRuntime(14072): at dalvik.system.NativeStart.main(Native Method) 
+2

您可能需要搜索避免出现'NetworkOnMainThreadException'。然后,当您在主/ UI线程上执行网络操作时,您会发现会发生这种情况。 Post code .. –

+0

[看这个答案](http://stackoverflow.com/questions/16091341/what-is-the-way-to-run-a-new-thread-and-a-ui-thread-in -android/16091615#16091615)将您的网络操作放入'AsyncTask'中 – codeMagic

回答

0

看行AndroidLogin.java 101。方法postLoginData不应该从UI线程调用。你需要启动一个新的线程,并将方法调用移动到那里。

1

假设你在主线程要么改变ThreadPolicy运行的网络操作或的AsyncTask运行

的AsyncTask是这里的更好的解决方案是基本轮廓看起来here更多信息:

private class LoginTask extends AsyncTask { 
    public LoginTask(Context context) { 
     super(context); 
    } 

    @Override 
    protected Object doInBackground(String... urls) { 
      try{  

       }catch{ 

       } 
       return.....; 
       } 
} 

主题政策是一个坏方法,但它的快速肮脏和Android开发指南建议反对,但它的确行得通,但我会建议反对它: StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

+1

这不是一个好主意。 'AsyncTask'虽然 – codeMagic

+0

真正^^但这些是解决问题的两种方法,但你是对的我会建议AsyncTask以及ThreadPolicy改变 – TooTiredToDrink

+2

所以最好不要推荐那种不好的做法。只是一个很好的选择,并详细说明这一点。 – codeMagic