开发者

Android Twitter asyncTask "cant create handler..." error

i bascially have an activity

that calls an async task to set up the twitter classes, provided via twitter4j.

But i recieve an error regarding "cant create handler inside thread that has not called looper.prepare " which is orginating from the TwitterApp class where there is a handler...

how can i get around this? successfully setting up the class no on the main UI thread as i used to have before (which worked perfectly but slowed down the app);

im basically doing:

new SetUpAsyncTaskt().execute();

within the asynctask all im doing is:

TwitterApp mTwitter;
postToTwitter = true;
String twitter_consumer_key="bllaalaa";
String twitter_secret_key="blaa"



private class SetUpAsyncTask extends AsyncTask<Void, Void, Void> {


    @Override
    protected Void doInBackground(Void... params) {



        mTwitter = new TwitterApp(context, twitter_consumer_key,twitter_secret_key);

        mTwitter.setListener(mTwLoginDialogListener);

        return null;
    }

    @Override
    protected void onPostExecute(Void result) {



        if(!mTwitter.hasAccessToken()){
            postToTwitter=false;
        }
    }
}

Thanks for any help!

UPDATE: After doing more testing, it seems the problem is due to the context, as i开发者_开发知识库f i remove all context based data within the class it works, but what i dont get is if i pass in the context from the UI thread, it still occurs ?? :S

UPDATE2: Found another way around it, thanks to all who replied.


Look here for the documentation: http://developer.android.com/reference/android/os/AsyncTask.html

some rules:

  1. The task instance must be created on the UI thread.
  2. execute(Params...) must be invoked on the UI thread.

My guess is you are executing the task on some different thread. To Execute it on UI thread create a Handler in onCreate and:

mHandler.post(new Runnable(){
  //insert task creation & execution here 
  });

In this way the result that are in onPostExecute will be returned on the UI Thread too.


You can use runOnUiThread() to make the non-UI task run on the UI,

Try this,

@Override
    protected Void doInBackground(Void... params) {

mTwitter = new TwitterApp(context, twitter_consumer_key,twitter_secret_key);
Activity_name.this.runOnUiThread(new Runnable() {

          @Override
          public void run() {
        mTwitter.setListener(mTwLoginDialogListener);
          }
       });
        return null;
    }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜