Android - AsyncTask中的onPostExecute函数

3
我目前有一个asyncTask,在preexecute时开始加载进度条,在后台向服务器发送一些内容,并在post execute时关闭对话框并启用按钮。但是,由于doInBackground返回null,我的post execute没有执行。我正在尝试找出我可以做什么来使postExecute运行的方法。 有任何想法吗? 谢谢
代码:
class DatabaseAsync extends AsyncTask<Void,Void,Void>{
        @Override
        protected void onPreExecute(){
            dialog = ProgressDialog.show(MainFeedActivity.this, null, "Posting...");
        }

        @Override
        protected Void doInBackground(Void... arg0) {
            Log.d(TAG, "send to databse");
            SendToDatabase();
            Log.d(TAG, "sent to database - DONE");

            //dialog.dismiss();

            //sendButton.setEnabled(true);

            return null;
        }

        protected void onPostExecute(){
            Log.d(TAG, "p execute");
            dialog.dismiss();
            sendButton.setEnabled(true);
            Log.d(TAG, "done executing");
        }

    }
2个回答

5
在你的情况下,从 doInBackground() 返回 null 完全没有问题。只需确保 onPostExecute() 如下所示:
@Override
protected void onPostExecute(Void result) {
    Log.d(TAG, "p execute");
    dialog.dismiss();
    sendButton.setEnabled(true);
    Log.d(TAG, "done executing");
}

2
只是为了澄清。onPostExecute方法没有被调用的原因是在DatabaseAsync类中根本没有实现它。相反,作者在DatabaseAsync中实现了一个零参数的方法。当然,这个方法不会被执行,因为它被认为是完全不同和重载的方法。请查看http://developer.android.com/reference/android/os/AsyncTask.html#onPostExecute(Result)上的JavaDoc。 - Glenn Bech
非常感谢你的帮助,Arhimed,我真的很感激。 - Splitusa

0

将您的 DatabaseAsync 类更改为以下内容:

class DatabaseAsync extends AsyncTask<String, Void, String>{

        protected void onPreExecute(){
              dialog = ProgressDialog.show(MainFeedActivity.this, null, "Posting...");
        }


        protected String doInBackground(String... arg0) {
            Log.d("TAG", "send to databse");

            Log.d("", "sent to database - DONE");


            //dialog.dismiss();

            //sendButton.setEnabled(true);

            return null;
        }

        protected void onPostExecute(String result){
            Log.d("TAG", "p execute");
            dialog.dismiss();

            Log.d("TAG", "done executing");
        }

在代码正常运行后,请阅读此链接http://www.vogella.de/articles/AndroidPerformance/article.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接