【问题标题】:Android - on post execute in AsyncTaskAndroid - 在 AsyncTask 中执行后执行
【发布时间】:2011-12-03 17:33:38
【问题描述】:

我目前有一个asyncTask,它在预执行时开始一个加载栏,在后台向服务器发送一些东西,在执行后关闭对话框并启用一个按钮。但是,由于 doInBackground 返回 null,我的 post 执行没有执行。我试图弄清楚我能做些什么来让 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");
        }

    }

【问题讨论】:

    标签: android database button dialog android-asynctask


    【解决方案1】:

    在您的情况下,从doInBackground() 返回null 是完全可以的。只要确保 onPostExecute() 看起来像这样:

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

    【讨论】:

    • 只是为了澄清。之所以没有调用 onPostExecute,是因为在 DatabaseAsync 类中根本没有实现它。相反,作者在 DatabaseAsync 中实现了一个零参数的方法。这当然不会被执行,因为它被认为是一种完全不同的重载方法。查看developer.android.com/reference/android/os/…的JavaDoc
    • 非常感谢 Arhimed 的帮助,非常感谢。
    【解决方案2】:

    像这样更改您的 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多