【问题标题】:Creating a ProgressDialog for loading为加载创建 ProgressDialog
【发布时间】:2012-03-20 14:31:23
【问题描述】:

我有这个来自site.的sn-p

final ProgressDialog dialog = ProgressDialog.show(this, "Title", 
"Message", true);
final Handler handler = new Handler() {
   public void handleMessage(Message msg) {
      dialog.dismiss();
      }
   };
Thread checkUpdate = new Thread() {  
   public void run() {
//
// YOUR LONG CALCULATION (OR OTHER) GOES HERE
//
      handler.sendEmptyMessage(0);
      }
   };
checkUpdate.start();

我不完全理解它是如何完全工作的,除了它为 ProcessDialog 创建一个新线程以运行直到进程完成。

我假设如果我错了,这当然会纠正我,这会创建一个新线程,使现有线程仍在运行,这将导致 .xml 项上出现空值。

我的问题是

如何在不进入 null 的情况下运行此代码 指针异常?

是否有另一种替代解决方案来做类似的事情 这个?

【问题讨论】:

  • 哪一行会出现空指针异常?
  • 请提供您的 NullPointerException 的堆栈跟踪。
  • 试试这个...使用 getapplicationcontext() 而不是 'this'
  • 方法超过 100 行,但是我可以告诉你,在线程计算之后,它会进入 log.i,它给出一个输入但字符串是空的。

标签: android progressdialog


【解决方案1】:

更优雅和首选的方法是使用AsyncTask:

private class DownloadTask extends AsyncTask<Object, Object, Object>
    {
        @Override
        protected Object doInBackground(final Object... urls)
        {
           // long calculation

            return null;
        }

        @Override
        protected void onPostExecute(final Object result)
        {
            closeDialog();
        }

        @Override
        protected void onPreExecute()
        {
            showDialog();
        }
    }

private void closeDialog()
    {
        if (dialog != null)
        {
            dialog.dismiss();
        }
    }

    private void showDialog()
    {
        if (dialog !=null && !dialog.isShowing())
        {
            dialog = new ProgressDialog(this);
            dialog.setMessage("Loading. Please wait...");
            dialog.show();

        }

    }

用这一行调用它:

new DownloadTask().execute();

【讨论】:

  • 我如何让它只用一个方法运行?我知道我一开始就需要它以使其加载更专业。
  • 我不明白你的意思,你可以调用 new DownloadTask().execute();你想要多少次都可以..
  • 对不起,我以前从未在我的活动中实现异步任务类。尝试添加此代码时出现此错误。原因:java.lang.IllegalStateException:系统服务在 onCreate() 之前不可用于活动
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
相关资源
最近更新 更多