2012-11-20 65 views
1

我正在构建一个应用程序,使用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(); 
} 

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

谢谢

+0

看看这篇文章:http://stackoverflow.com/a/6159735/543136 – TofferJ

+0

http://stackoverflow.com/questions/8612406/android-os-networkonmainthreadexception-need-to-use-async-任务/ 8612418#8612418 –

回答

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); 
+0

谢谢你的快速回复提琴手。我会试试看。 – Bobby

+0

我正要发表一个答案,但被其他东西赶上了。如果添加onPreExecute()方法,您将显示Spinner并将其隐藏在onPostExecute()方法中,此答案将执行。 –

+0

你说得对。我刚刚更新了我的答案。 – fiddler

0

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的帮助。这个项目让开发者受益!