【问题标题】:Android - Slow ProgressDialog with webservice AsyncTaskAndroid - 带有网络服务 AsyncTask 的慢速 ProgressDialog
【发布时间】:2011-10-18 13:37:17
【问题描述】:

我有问题。我有一个异步任务,我在其中连接到 Web 服务,带来数据并将其放入数据库中。没关系,它有效。但是我有一个问题,我想在点击 REFRESH 后放一个进度条(那是我做网络服务的时候)..

当我刷新时,我的屏幕冻结需要 2 秒钟,然后进度条会稍微启动,然后消失,但任务是在进度条启动之前完成的。

这是异步任务的代码

private class tareaActualizar extends AsyncTask<Void, Void, Boolean> {
         private static final String DEBUG_TAG = "actualizo";
         private ProgressDialog pd = new ProgressDialog(ShamanOperativoActivity.this);

         @Override
         protected void onCancelled() {
             Log.i(DEBUG_TAG, "onCancelled");

                 pd.dismiss();

         }

         @Override
         protected void onPostExecute(Boolean result) {
             Log.i(DEBUG_TAG, "onPostExecute");

                 pd.dismiss();

         }

         @Override
         protected void onPreExecute() {

             pd.setMessage("Actualizando...");
             pd.show();


         }

         @Override
         protected void onProgressUpdate(Void... values) {



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


            webService();

             tv2 = resultado.toString();            //Obtengo el string resultado del WebService en tv2

             //Obtengo la hora actual

             insertoEnBD(); 
             // Inserto en base de datos (Si es que pase por el Web Service)
             Boolean res = true;
            return res;



         }







     }

Webservice是webservice的连接方式,“InsertoBD”是我将数据放入数据库时​​..谢谢

【问题讨论】:

  • 我没有看到你的 AsyncTask 实现有什么问题,你怎么知道你的任务在进度条开始之前完成了。根据您的描述,除了 2 秒的冻结之外,我想说这是我对您的 AsyncTask 的期望:进度条显示 -> 任务快速完成 -> 进度条已关闭。
  • 因为我的 ui 被刷新并更改了数据.. 在我看到进度条开始之后..
  • 我建议注释掉 doInBackground() 中的所有代码,然后简单地执行 Log.i(TAG, "do something") 以查看 UI 刷新是否实际上来自您的 doInBackground()。通过这样做,您还可以检查 Logcat 以查看是否在 onPreExecute() 之后调用了 doInBackground()。我猜你的代码中可能有其他地方在主线程中执行相同的繁重任务,这解释了单击刷新按钮时 2 秒冻结。

标签: android progress-bar android-asynctask


【解决方案1】:

尝试将您的 ProgressDialog 实例化方式更改为:

     @Override
     protected void onPreExecute() {
         pd  = ProgressDialog.show( context, "", "My text is here..." );
     }

请注意,如果您只使用模拟器进行测试,ProgressDialogs 出现/消失的速度可能会很慢,这意味着如果您在设备上进行测试,您的问题可能不存在。

【讨论】:

    【解决方案2】:

    我建议你在你的环境Activity中声明ProgressDialog。然后你可以试试这段代码。它对我有用:

    声明AsyncTask的环境类:

    private ProgressDialog dialog;
    
    ...
    
    private class tareaActualizar extends AsyncTask<Void, Void, Boolean> {
             private static final String DEBUG_TAG = "actualizo";
    
    ...
    @Override
             protected void onPreExecute() {
    
                        pd = new ProgressDialog(ShamanOperativoActivity.this);
    
                pd = ProgressDialog.show(getParent().getParent(), "Wait",
                        "Loading...");
    
    
             }
    ...
    

    【讨论】:

    • 我无法理解这一点,我在我的类中声明了对话框,然后我在我的 asynctask 类中使用了 pd?我试过这段代码,它显示了一个强制关闭 nullpointer 异常..
    • 您必须将两个类放在同一个 .java 文件中。
    【解决方案3】:

    试试这些.....

    private class tareaActualizar extends AsyncTask<Void, Void, Void> 
    
    {
    
    private static final String DEBUG_TAG = "actualizo";
    
             private ProgressDialog pd = new ProgressDialog(ShamanOperativoActivity.this);
    
            protected void onPreExecute() {
                  pd.setMessage("Actualizando...");
                 pd.show();
    
            }
    
            protected Void doInBackground(Void... para) {
    
                  webService();
    
                 tv2 = resultado.toString();            //Obtengo el string resultado del WebService en tv2
    
                 //Obtengo la hora actual
    
                 insertoEnBD(); 
                 // Inserto en base de datos (Si es que pase por el Web Service)
                 Boolean res = true;
                return res;
    
    
            }
    
            protected void onPostExecute(Void params) {
    
                  pd.dismiss();
    
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 2014-12-18
      • 1970-01-01
      相关资源
      最近更新 更多