2013-12-11 7 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

Вы могли бы исправить ched для 'NetworkOnMainThreadException'. Тогда вы бы знали, что это происходит, когда вы выполняете сетевые операции в потоке основного/пользовательского интерфейса. Почтовый код. –

+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

Посмотрите на линии 101 из AndroidLogin.java. Метод postLoginData не должен вызываться из потока пользовательского интерфейса. Вам нужно запустить новый поток и переместить вызов метода внутри.

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.....; 
       } 
} 

Thread политика - это плохой способ, но ее быстрый грязный и руководство Android Dev предлагает против этого, но он работает, но я бы предложил против него: StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

+1

Это не очень хорошая идея. «AsyncTask» имеет значение – codeMagic

+0

True ^^, но это два решения проблемы, но вы правы. Я предлагаю AsyncTask, а также изменение ThreadPolicy. – TooTiredToDrink

+2

Так что лучше не предлагать тот, который является плохим. Только тот, который является хорошим вариантом, и подробно остановимся на этом. – codeMagic

Смежные вопросы