2012-10-25 52 views
1

我有一个活动的基类和扩展基类的子类。超类有执行某些操作的异步任务。我通过否则它抛出一个IllegalInitializerError在UI线程上运行它称之为:ProgressBar不会立即显示在android

superclass.this.runOnUiThread(new Runnable() { 
    public void run() { 
     String p=""; 
     try { 
      p=new asynctasker().execute().get(); 
     } 
    } 
} 

在我的异步任务:

protected void onPreExecute() 
{ 
    // TODO Auto-generated method stub 
    super.onPreExecute(); 
    //showDialog(); 
    Log.d("Now","Inside right now"); 
    dialog = ProgressDialog.show(class_create_event.this, "Loading1", "Please Wait"); 
} 

然而几乎在请求端显示的对话框。我部分打印正确。我知道有些东西阻塞了我的UI线程。但是如果我不从UI线程调用异步任务,它会抛出一个非法的初始化错误。有什么出路吗?

回答

1

你不需要有UIthread调用的AsyncTask

调用它像这样

FetchRSSFeeds async = new FetchRSSFeeds(); 
async.execute(); 


private class FetchRSSFeeds extends AsyncTask<String, Void, Boolean> { 

    private ProgressDialog dialog = new ProgressDialog(HomeActivity.this); 

    /** progress dialog to show user that the backup is processing. */ 
    /** application context. */ 

    protected void onPreExecute() { 
     this.dialog.setMessage(getResources().getString(
       R.string.Loading_String)); 
     this.dialog.show(); 
    } 

    protected Boolean doInBackground(final String... args) { 
     try { 

      // Fetch the RSS Feeds from URL 
      // do background process 

      return true; 
     } catch (Exception e) { 
      Log.e("tag", "error", e); 
      return false; 
     } 
    } 

    @Override 
    protected void onPostExecute(final Boolean success) { 

     if (dialog.isShowing()) { 
      dialog.dismiss(); 
     } 

     if (success) { 
      // Setting data to list adaptar 
      setListData(); 
     } 
    } 
} 
+0

由于这个异步任务从超类方面,我不能就这么直接调用执行。像这样调用会产生Exception Ljava/lang/RuntimeException;在Landroid/os/AsyncTask中抛出; 。我只能从主应用程序线程创建并执行一个AsyncTask实例 –