我试图通过单击按钮找到Android设备的当前位置。当在UIThread中运行时,Geocoder挂起UI,因此我必须在后台线程上运行它。我是AsyncTasks的新手。到目前为止,我有这行代码,但我完全不知道参数,进度,结果必须是什么。我不希望任何事情进入,或者没有进展,只是结果是一个呈现当前地址的字符串。
提前谢谢。
public void onClickGetCCity(View v){
new GetCurrentCity.execute();
}
private class GetCurrentCity extends AsyncTask<Void, Void, Void>{
@Override
protected void doInBackground(Void... params) {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROV
IDER);
double longitude = location.getLongitude();
double latitude = location.getLatitude();
if(Geocoder.isPresent()){
Geocoder gcd = new Geocoder(getApplicationContext(), Locale.getDefault());
try {
List<Address> addresses = gcd.getFromLocation(latitude, longitude, 1);
if(addresses != null) {
Address returnedAddress = addresses.get(0);
for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) {
strReturnedAddress = (returnedAddress.getAddressLine(i)).toString();
答案 0 :(得分:1)
第一个参数化类型是doInBackground()的输入。第二个是onProgressUpdate()的输入。第三个是onPostExecute()的输入。你不需要全部使用它们(这意味着你可以把它们中的一个或多个留作Void)。
此类的javadoc有一个示例,解释了这一切是如何工作的:AsyncTask
答案 1 :(得分:0)
第三个类型参数应为String
。所以doInBackground
的签名是:
public String doInBackground(Void... params)
获取地址字符串后,从doInBackground
返回
return strReturnedAddress;
实施方法onPostExecute(String result)
。由于它在UI线程上运行,因此您可以在TextView
或Toast消息中显示结果。