2011-08-15 3 views
0

내 앱이 네트워크에 많이 의존하기 때문에 앱을 끊지 않아야합니다. 그래서 내가AsyncTask 내에서 Looper.prepare()를 호출하지 않은 스레드 내부에서 핸들러를 만들 수 없습니다.

  1. MainActvity이 두 번째 활동을 확장해야 Asyncask

    를 사용하려고

  2. AsyncTask를 MainActivity에서 내부 클래스로서
  3. 두 번째 활동

주요 활동 및 비동기 작업 :

01 23,889,

두 번째 활동 :

public class SecondActivity extends Activity { 


public void setConnection() { 
    //My stuffs 
} 

public void getID(TextView txtUserName) { 

    // here i'm calling another function inside package 

    if (isSession()) { 
     Log.d(TAG, "sessionValid"); 
     mAsyncRunner.request("me", new IDRequestListener()); 
    } else { 
     // no logged in, so relogin 
     Log.d(TAG, "sessionNOTValid, relogin"); 
     mFacebook.authorize(this, PERMS, new LoginDialogListener()); 
    } 
} 

/////////////// Code continues.....} 

이 코드에서 오류가 무엇, 내가이
내가 오류가 아래지고있어 해결하는 데 도움을 주시기 바랍니다

08-15 11:01:07.211: WARN/System.err(462): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 
08-15 11:01:07.251: WARN/System.err(462):  at android.os.Handler.<init>(Handler.java:121) 
08-15 11:01:07.251: WARN/System.err(462):  at android.app.Dialog.<init>(Dialog.java:101) 
08-15 11:01:07.271: WARN/System.err(462):  at android.app.Dialog.<init>(Dialog.java:123) 
08-15 11:01:07.271: WARN/System.err(462):  at com.facebook.android.FbDialog.<init>(FbDialog.java:63) 
08-15 11:01:07.281: WARN/System.err(462):  at com.facebook.android.Facebook.dialog(Facebook.java:622) 
08-15 11:01:07.291: WARN/System.err(462):  at com.facebook.android.Facebook.startDialogAuth(Facebook.java:297) 
08-15 11:01:07.301: WARN/System.err(462):  at com.facebook.android.Facebook.authorize(Facebook.java:195) 
08-15 11:01:07.311: WARN/System.err(462):  at com.facebook.android.Facebook.authorize(Facebook.java:114) 
08-15 11:01:07.321: WARN/System.err(462):  at com.singleupdater.FacebookActivity.getID(FacebookActivity.java:61) 
08-15 11:01:07.331: WARN/System.err(462):  at com.singleupdater.SingleStausUpdater$postToTwitter.doInBackground(SingleStausUpdater.java:149) 
08-15 11:01:07.341: WARN/System.err(462):  at com.singleupdater.SingleStausUpdater$postToTwitter.doInBackground(SingleStausUpdater.java:1) 
08-15 11:01:07.351: WARN/System.err(462):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
08-15 11:01:07.361: WARN/System.err(462):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
08-15 11:01:07.371: WARN/System.err(462):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
08-15 11:01:07.371: WARN/System.err(462):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 
08-15 11:01:07.391: WARN/System.err(462):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 
08-15 11:01:07.391: WARN/System.err(462):  at java.lang.Thread.run(Thread.java:1096) 

답변

0

것 같습니다의 일부가 귀하의 방법 - setConnection() 또는 getID(txtUserName)이 백그라운드 스레드에서 UI에 액세스하려고 시도하는데 실패합니다. UI 로직을 onPostExecute으로 이동하여 UI 스레드에서 처리하십시오.

+0

답장 보내 주셔서 감사합니다. onPreExecute()/onPostExecute 메서드를 호출하면 별도의 스레드에서 실행되거나 UI 스레드가 실행됩니까? – shanmugam

+0

이 두 메서드는 UI 스레드에서 실행되므로 작업 결과 (예 :'TextView' 등 설정) 만 적용됩니다. 웹 서비스 통신 및 계산과 같은 모든 무거운 작업은 UI를 고정시키지 않는 백그라운드 스레드이기 때문에'doInBackground'에서 여전히 수행되어야합니다. – ernazm

+0

나중에 볼 수 있습니다. 그래서 비동기 작업 내에서 두 번째 활동에서 모든 계산을 가져와야한다고 말하는 것입니까? – shanmugam