1

我似乎在兜圈子。我有一些代码,即使在 Galaxy S3 上也需要几秒钟才能运行。从数据库中拖拽数据。我想在这个周围添加一个进度条弹出窗口(旋转圆圈),让用户知道应用程序正在做某事。我已经在应用程序的其他地方尝试了 Asyntasks 并且工作正常,但是对于这种类型,主 UI 不会等待 Asyntask 完成然后继续,因此被调用的新活动没有它需要的所有数据并崩溃。

AsyncTask 是解决这个问题的最佳方法,还是有一种更简单的方法来启动主 Activity,显示进度条,然后在 long deley 完成后继续前进。

感谢时间

更新

public class UpdateDetailsAsyncTask extends AsyncTask<Void, Void, Boolean> {   

    private Context context;
    private TaskCallback callback;

    private ArrayList<Object> object;

    private ProgressDialog progress; 

    public UpdateDetailsAsyncTask (
            Context pContext, 
            ArrayList<Object> pObject,
            TaskCallback pCallback) {

        context = pContext;
        callback = pCallback;
        object = pObject;

    }

    @Override
    protected void onPreExecute() {

        Log.i("AsyncTask", "onPreExecuted");

        progress = new ProgressDialog(context);
        progress.setMessage(context.getResources().getString(R.string.loading));
        progress.show();

    }

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

        Log.i("Archery", "AsyncTask Excuted");
        Log.i("Archery Scorepad", "Building Continue Round Details");

        // Save Data to Database

        return true;

    }


    protected void onPostExecute(Boolean result) {

        Log.i("AsyncTask", "onPostExuted");

        progress.dismiss();

        callback.startNewActivity();

    }

}

从主 Activity 调用任务

new UpdateDetailsAsyncTask(this, ArrayListOfObjects, this).exute();

更新 2

..

更新 3

执行某些工作的代码调用 Util 类中的方法,该方法调用数据库类。我有日志消息显示我保存到数据库的所有数据行。它正确启动并运行它,但 onPostExecute() 似乎在数据库方法完成之前被调用。

我的问题是我在活动中嵌套了类并且任务似乎已经完成,而它下面的类还没有?

谢谢

4

2 回答 2

2

onPostExecute您必须从 Asyntask更改为下一个活动

于 2013-05-21T09:31:29.647 回答
0

是的!

这是 AsuncTask 的简单代码

private class LoadImageAction extends AsyncTask<String, String, String>{

    private Course course;
    private ProgressBar pb;

    public LoadImageAction(Course course, ProgressBar pb){
        this.course = course;
        this.pb = pb;
    }

    @Override
    protected void onPreExecute(){

    }

    @Override
    protected String doInBackground(String... arg0) {
        // TODO Auto-generated method stub

        return null;
    }

    @Override 
    protected void onProgressUpdate(String... string){


    }

    @Override
    protected void onPostExecute(String result){

    }
}

您可以通过以下方式运行操作

new LoadImageAction().execute();
于 2013-05-21T09:35:36.017 回答