【问题标题】:How to display progress spinner?如何显示进度微调器?
【发布时间】:2012-11-20 09:51:39
【问题描述】:

我正在构建一个应用程序,它将使用 GeoCoder 从用户输入中获取街道地址。附上我制作的一段代码:

Geocoder gc = new Geocoder(getBaseContext(), Locale.getDefault());

List<Address> addresses = null;
StringBuilder sb = new StringBuilder();
String destination = edittext_destination.getText().toString();

try {
    addresses = gc.getFromLocationName(destination, 10);
} catch (Exception e){
    Toast.makeText(getBaseContext(), "Address not found", Toast.LENGTH_SHORT).show();
}

上面的代码可以运行,但是返回结果需要一些时间。在等待结果时,我想显示进度微调器。我知道它应该使用 Thread 但我不知道如何开始。我希望任何人都可以提供帮助。

谢谢

【问题讨论】:

标签: android multithreading progress


【解决方案1】:

您可以使用AsyncTask

    final String destination = edittext_destination.getText().toString();
    new AsyncTask<String, Void, List<Address>>() {
        private Dialog loadingDialog;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            loadingDialog = ProgressDialog.show(TestActivity.this, "Please wait", "Loading addresses...");
        }

        @Override
        protected List<Address> doInBackground(String... params) {
            String destination = params[0];
            try {
                Geocoder gc = new Geocoder(getBaseContext(),
                        Locale.getDefault());
                return gc.getFromLocationName(destination, 10);
            } catch (Exception e) {
                return null;
            }
        }

        @Override
        protected void onPostExecute(List<Address> addresses) {
            loadingDialog.dismiss();

            if (addresses == null) {
                Toast.makeText(getBaseContext(), "Geocoding error",
                        Toast.LENGTH_SHORT).show();
            } else if (addresses.size() == 0) {
                Toast.makeText(getBaseContext(), "Address not found",
                        Toast.LENGTH_SHORT).show();
            } else {
                // Do UI stuff with your addresses
                Toast.makeText(getBaseContext(), "Addresses found: " + addresses.size(), Toast.LENGTH_SHORT).show();
            }
        }
    }.execute(destination);

【讨论】:

  • 感谢您的快速响应提琴手。我会试试看。
  • 我正要发布答案,但遇到了其他问题。如果您在显示 Spinner 的位置添加 onPreExecute() 方法并将其隐藏在 onPostExecute() 方法中,则此答案将起作用。
  • 我已经尝试过代码家伙。但不幸的是,它还没有工作。
  • 很遗憾地告诉你们,代码不起作用。我不知道怎么了。我应该在这里给出我的整个代码吗?
  • 我在我的代码中忘记了.execute(destination);...所以任务从未执行。使用更新后的代码重试
【解决方案2】:

Android Query 让所有这些异步的东西变得超级简单。您可以添加微调器和进度条,而不是像这样的异步调用:

设置:

ProgressDialog dialog = new ProgressDialog(this);

dialog.setIndeterminate(true);
dialog.setCancelable(true);
dialog.setInverseBackgroundForced(false);
dialog.setCanceledOnTouchOutside(true);
dialog.setTitle("Sending...");

String url = "http://www.google.com/uds/GnewsSearch?q=Obama&v=1.0";                

你的异步调用:

aq.progress(dialog).ajax(url, JSONObject.class, this, "jsonCb");

看看吧!优秀的响应时间和来自 Peter Liu 的帮助。这个项目让开发者受益!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-17
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    相关资源
    最近更新 更多