2011-08-24 45 views
0

我bascially有一个活动的Android的Twitter的AsyncTask“着创建处理...”错误

调用一个异步任务来设置的Twitter类,通过twitter4j提供。

但我收到关于 其从TwitterApp类那里是一个处理程序orginating“不能内螺纹已不叫looper.prepare创建处理程序”的错误...

我怎样才能解决这个得到?成功地在主用户界面线程上设置了类别号,就像以前一样(它可以很好地工作但减慢了应用程序的速度); 。

IM基本上是做:

新SetUpAsyncTaskt()执行();

中的AsyncTask内的所有IM做的是:

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:找到了另一种方式,谢谢所有回答。

回答

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

这种方法确实有助于消除错误,但带走了我需要代码更快运行的事实,但这并不是,但无论如何感谢你 – asd2005

+0

那么,这取决于你的代码什么是你已经使用它。谢谢 –

+0

你有没有读过我添加到我的问题 – asd2005

1

看看这里的文档:http://developer.android.com/reference/android/os/AsyncTask.html

一些规则:

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

我的猜测是你正在某个不同的线程上执行任务。执行它的UI线程的onCreate创建一个处理程序和:

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

这样的结果是在onPostExecute将在UI线程也被退回。

+0

问题仍然存在:子真的不得到它我甚至去除mHandlers在twitter类中,它仍然存在 – asd2005