2014-02-25 107 views
0

我正在创建一个移动应用程序,它使用AsyncTask从远程数据库更新本地数据库。这工作正常,但视图(旋转器和表数据)依赖于本地数据库中的数据。如果在初始运行asynctask之后这样做很好,但在第一次加载时屏幕是空白的。等待,而Asynctask完成android

我:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    SharedPreferences sp = getSharedPreferences("***", 0); 
    boolean initalSync = sp.getBoolean("***.android.db.inital", false); 

    if(initalSync==false){ 
    AsyncTaskRunner backgroundTask = new AsyncTaskRunner(this); 
    backgroundTask.execute(); 
    } 

因为从远程数据库远程数据库的本地数据库的更新是一个后台任务,如果initalsync布尔是假执行。

该片段显示基于本地数据库的信息,并且是默认/启动视图。

我目前运行

if(initalSync==true){ 
    // DISPLAY TABLE OF DATA 
    } 

我知道我不能“暂停”的线程,我不能执行本地表数据显示在onPostExecute我会更新在其他时间数据库保护它。

我基本上希望显示进度条,等待的AsyncTask完成,然后允许的代码的其余部分运行

任何想法?

+1

是的,你不能等待,你需要显示的东西,而你没有别的可以显示。进度条是一个好主意。我不明白的是,你这样做的问题在哪里。 – zapl

回答

0

你想提供一个处理程序,你可以传入你的AsynchTask听起来。

在AsyncTask中提供诸如setCompletionHandler(myCompletionHandler)之类的函数。

public void setCompletionHandler(MyCompletionHandler handlerF) 
{ 
    asyncHandler_ = handlerF; 
} 

然后在您的本地活动中创建您的处理程序。

private class MyCompletionHandler 
{ 
    operationCompleted() 
    { 
     // updateTableCode ... 
    } 
} 

当你已经完成了的AsyncTask任务,调用

asyncHandler_.operationCompleted() 
0

使用progressdialog,并更新你的意见onPostExecuted方法。

public class MyAsyncTask extends AsyncTask ... 

    onPreExecute 
     // create progress dialog 
     // start dialog 


    doBackground 
     // get your data while progress dialog is shown 

    onPostExecuted 
     // dismiss dialog 
     // update your views. 
+0

我如何更新我的意见/片段? – user2229747