【问题标题】:Logcat error I do not understand [duplicate]Logcat错误我不明白[重复]
【发布时间】:2013-12-11 01:30:16
【问题描述】:

所以通常我可以通过查看错误日志来找出问题所在。大多数情况下,它会给我一个行号,我可以从那里找出来。

但现在,我迷路了。我不明白我的代码哪里出错了。

我什至不确定从哪里开始解决此错误。我没有要求任何讲义或代码更正,所以我还没有显示我的代码,我只是想要一些提示来找出这个错误:

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)

【问题讨论】:

  • 您可以搜索NetworkOnMainThreadException。然后您就会知道在主/UI 线程上执行网络操作时会发生这种情况。邮政编码..
  • See this answer 将您的网络操作放入AsyncTask

标签: java android eclipse logcat


【解决方案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();

【讨论】:

  • 这不是一个好主意。 AsyncTask 虽然是
  • True ^^ 但这是解决问题的两种方法,但你是对的,我建议 AsyncTask 以及 ThreadPolicy 更改
  • 所以最好不要建议一个不好的做法。只是一个不错的选择并详细说明。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-28
    • 2017-10-01
    • 2021-12-17
    • 1970-01-01
    • 2018-05-22
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多