0

我基本上有活动

它调用异步任务来设置通过 twitter4j 提供的 twitter 类。

但我收到一个关于“无法在未调用 looper.prepare 的线程内创建处理程序”的错误,该错误来自有处理程序的 TwitterApp 类......

我怎样才能解决这个问题?像以前一样在主 UI 线程上成功设置类号(效果很好,但减慢了应用程序的速度);

我基本上在做:

新的 SetUpAsyncTaskt().execute();

在 asynctask 中,我所做的一切是:

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

谢谢你的帮助!

更新:在做了更多测试之后,问题似乎是由于上下文,好像我在它工作的类中删除了所有基于上下文的数据,但我没有得到的是,如果我从 UI 线程传入上下文,它仍然发生?? :S

UPDATE2:找到了另一种解决方法,感谢所有回复的人。

4

2 回答 2

1

在此处查找文档:http: //developer.android.com/reference/android/os/AsyncTask.html

一些规则:

  1. 任务实例必须在 UI 线程上创建。
  2. 必须在 UI 线程上调用 execute(Params...)。

我的猜测是您正在某个不同的线程上执行任务。要在 UI 线程上执行它,请在 onCreate 中创建一个处理程序并:

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

这样,onPostExecute 中的结果也将在 UI 线程上返回。

于 2011-08-24T04:35:33.267 回答
0

您可以使用 runOnUiThread() 使非 UI 任务在 UI 上运行,

试试这个,

@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;
    }
于 2011-08-24T04:57:54.630 回答