2012-10-27 2 views
1

사용자가 완료 한 후에 간단한 http 알림을 보내려고합니다. 네트워크 작업에 AsyncTask를 사용하고 응용 프로그램이 여전히이 예외 인 android.os.NetworkOnMainThreadException과 충돌하는 이유를 모르겠습니다.AsyncTask를 사용하여도 여전히이 "android.os.NetworkOnMainThreadException"이 표시됩니다.

private void buttonPressed() { 
    EditText editTextLogin = (EditText) findViewById(R.id.editTextPassword); 

    editTextLogin.setOnEditorActionListener(new OnEditorActionListener() { 

     @Override 
     public boolean onEditorAction(TextView arg0, int actionId, KeyEvent event) { 
      try{ 
       MyAsync test = new MyAsync(activity); 
       test.execute("http://google.com"); 
      }catch (Exception e) { 
       // TODO: handle exception 
       Log.e("log_tag", "Error in http connection "+e.toString()); 
      } 
      return true; 
     } 
    }); 
} 

해당 작업을이 행에서 실행할 수 있습니까?

여기에 클래스를

class MyAsync extends AsyncTask<String, Void, String[]>{ 
    private final Activity activity; 

    public MyAsync(Activity anActivity){ 
     activity = anActivity; //just in case i will need it later 
    } 

    @Override 
    protected String[] doInBackground(String... args) { 
     // TODO Auto-generated method stub 
     Document doc = Jsoup.connect(args[0]).get(); 
     //do something with this document as soon this error android.os.NetworkOnMainThreadException wont rise again 
     return new String[0]; 
    } 

    @Override 
    // Once the image is downloaded, associates it to the imageView 
    protected void onPostExecute(String[] result) { 
     Log.e('MyAsync','Finally i got it to work'); 
    } 
} 

오류 로그 캣입니다 : -

10-26 23:20:16.729: E/AndroidRuntime(1029): FATAL EXCEPTION: AsyncTask #1 
10-26 23:20:16.729: E/AndroidRuntime(1029): java.lang.RuntimeException: An error occured while executing doInBackground() 
10-26 23:20:16.729: E/AndroidRuntime(1029):  at android.os.AsyncTask$3.done(AsyncTask.java:278) 
10-26 23:20:16.729: E/AndroidRuntime(1029):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
10-26 23:20:16.729: E/AndroidRuntime(1029):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
10-26 23:20:16.729: E/AndroidRuntime(1029):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
10-26 23:20:16.729: E/AndroidRuntime(1029):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
10-26 23:20:16.729: E/AndroidRuntime(1029):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
10-26 23:20:16.729: E/AndroidRuntime(1029):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
10-26 23:20:16.729: E/AndroidRuntime(1029):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
10-26 23:20:16.729: E/AndroidRuntime(1029):  at java.lang.Thread.run(Thread.java:856) 
10-26 23:20:16.729: E/AndroidRuntime(1029): Caused by: java.lang.VerifyError: org/jivesoftware/smack/sasl/SASLMechanism 
10-26 23:20:16.729: E/AndroidRuntime(1029):  at java.lang.reflect.Constructor.constructNative(Native Method) 
10-26 23:20:16.729: E/AndroidRuntime(1029):  at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
+0

우리에게'MyAsync' 클래스 코드를 보여줍니다. –

+0

클래스 MyAsync 코드가 있습니다. – Constantin

+0

가능한 한 logcat을 표시하십시오. –

답변

0

당신은 분명히, 안드로이드와 호환되지 않는 헤로인의 버전을 사용하고 있습니다. IIRC, 당신이 사용해야하는 aSmack 라이브러리가 있습니다.

당신이 때문에 예외 헤로인에 문제가 있음을 알 수 있습니다 :

10-26 23:20:16.729: E/AndroidRuntime(1029): Caused by: java.lang.VerifyError: org/jivesoftware/smack/sasl/SASLMechanism 

org.jivesoftware.smack은 헤로인 라이브러리입니다.

또한 android.os.NetworkOnMainThreadException이 아니라 java.lang.VerifyError이라는 점에 유의하십시오.

+0

감사합니다. 알아 내지 못했습니다. – Constantin