【发布时间】:2026-01-25 05:45:02
【问题描述】:
所以我是编程新手,我想做的是制作一个 android 应用程序,为客户提供最近和最快的方式去电影院/加油站/市场。这样做的问题是,首先我需要通过 google api 找到最近的地方获取 lats 和 lngs,然后使用它们来指导 api。 所以我所做的是这样的:
GetNearbyPlaces.java
public class GetNearbyPlaces extends AsyncTask<Object, String, String>
{
private String googleplaceData, url;
private GoogleMap mMap;
@Override
protected String doInBackground(Object... objects)
{
mMap = (GoogleMap) objects[0];
url = (String) objects[1];
DownloadUrl downloadUrl = new DownloadUrl();
try
{
googleplaceData = downloadUrl.ReadTheURL(url);
}
catch (IOException e)
{
e.printStackTrace();
}
return googleplaceData;
}
@Override
protected void onPostExecute(String s)
{
List<HashMap<String, String>> nearbyPlacesList = null;
DataParser dataParser = new DataParser();
nearbyPlacesList = dataParser.parse(s);
DisplayNearbyPlaces(nearbyPlacesList);
super.onPostExecute(s);
Log.d("Message","telos execute ");
}
private void DisplayNearbyPlaces(List<HashMap<String, String>> nearbyPlacesList)
{
for (int i=0; i<nearbyPlacesList.size();
{
Log.d("Message","mesa stin for ");
MarkerOptions markerOptions = new MarkerOptions();
HashMap<String, String> googleNearbyPlace = nearbyPlacesList.get(i);
String nameOfPlace = googleNearbyPlace.get("place_name");
String vicinity = googleNearbyPlace.get("vicinity");
double lat = Double.parseDouble(googleNearbyPlace.get("lat"));
double lng = Double.parseDouble(googleNearbyPlace.get("lng"));
LatLng latLng = new LatLng(lat, lng);
markerOptions.position(latLng);
markerOptions.title(nameOfPlace + " : " + vicinity);
markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW));
mMap.addMarker(markerOptions);
mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
mMap.animateCamera(CameraUpdateFactory.zoomTo(10));
}
}
}
GoogleUserMaps.java
case R.id.gasstation_nearby:
mMap.clear();
mMap.addMarker(userLocMarkerOptions);
mMap.setTrafficEnabled(true);
url = getUrl(latitude,longitude,gasStation);
transferData[0] = mMap;
transferData[1] = url;
Log.d("Message","Prin kanei execute ");
getNearbyPlaces.execute(transferData);
Log.d("Message","afou kanei execute ");
Toast.makeText(this, "Searching for Nearby Gas Stations.", Toast.LENGTH_SHORT).show();
Toast.makeText(this, "Showing for Nearby Gas Stations.", Toast.LENGTH_SHORT).show();
break;
我想在 DisplayNearbyPlaces 中添加一些公共变量以获取 lats 和 lngs,但是当我在 getNearbyPlaces.execute(transferData).get(); 之后使用它时GoogleUserMaps.java 它给了我 0 结果。我无法理解 AsyncTask。有什么办法可以等到 getNearbyPlaces.execute(transferData).get();完成执行以获得 lats 和 lngs ?
提前谢谢你!
我的日志猫 I want to get the result after the execute finishes as I show you in the image bellow
【问题讨论】:
-
不,我看到我无法正确理解这一点
-
我能理解的是我应该把 private void DisplayNearbyPlaces(List
> nearPlacesList) 的所有代码移到 onPostExecute 里面? -
其中一个答案明确指出不要使用 .get() 方法。
-
结果是一样的,想得到getNearbyPlaces.execute(transferData);调用后的结果
标签: android asynchronous google-maps-api-3 android-asynctask