在 Android 片段中使用谷歌地图
Posted
技术标签:
【中文标题】在 Android 片段中使用谷歌地图【英文标题】:Using Google Maps in Android Fragment 【发布时间】:2020-12-21 01:19:29 【问题描述】:我正在开发一个使用 Zomato Api 来获取附近餐馆的应用程序。我有这个片段向用户显示点击餐厅的详细信息。我的目标是在地图上显示餐厅的位置,但我在执行此操作时遇到了问题,因为我遇到了错误。它只在活动中有效吗?我是否必须将层次结构更改为 FragmentActivity?
我的片段
public class RestaurantDetails extends Fragment implements onMapReadyCallback
private final String APIKEY="75be9f9e2239fe637bf9cb1b46979d91";
private SupportMapFragment mMapFragment;
private GoogleMap mGoogleMap;
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
View mContentView = inflater.inflate(R.layout.restaurant_details, container,false);
int id= Integer.parseInt(getArguments().getString("id"));
mMapFragment=getSupportFragmentManager().findFragmentById(R.id.map);
mMapFragment.getMapAsync(this);
getDetails(id);
return mContentView;
@Override
public void onMapReady(GoogleMap googleMap)
mGoogleMap=googleMap;
private void getDetails(int id)
getApi().getRestaurantDetails(id, APIKEY)
.enqueue(new Callback<Restaurant_>()
@Override
public void onResponse(Call<Restaurant_> call, Response<Restaurant_> response)
addMarker( Double.parseDouble(response.body().getLocation().getLatitude()), Double.parseDouble(response.body().getLocation().getLongitude()),
response.body().getName());
@Override
public void onFailure(Call<Restaurant_> call, Throwable t)
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage("Couldn´t load restaurant details");
AlertDialog mDialog = builder.create();
mDialog.show();
);
private void addMarker(double lat,double lon,String restaurantName)
LatLng latLng=new LatLng(lat,lon);
Marker marker=mGoogleMap.addMarker(new MarkerOptions()
.position(latLng)
.title(restaurantName));
private Retrofit getRetrofit()
return new Retrofit.Builder()
.baseUrl("https://developers.zomato.com/api/v2.1/")
.addConverterFactory(GsonConverterFactory.create())
.build();
private ZomatoApi getApi()
return getRetrofit().create(ZomatoApi.class);
我得到的错误是:
public class RestaurantDetails extends Fragment implements onMapReadyCallback
mMapFragment=getSupportFragmentManager().findFragmentById(R.id.map);
mMapFragment.getMapAsync(this);
【问题讨论】:
【参考方案1】:您的mMapFragment
可能为空。确保它不为空。如果是 this link 可能会有所帮助。
【讨论】:
那里发生了 NullPointerException。您的日志指向您错误所在的位置。 mMapFragment 位于 RestaurantDetails 片段中,这就是为什么它会告诉您要查看哪个文件。一旦你处理了 NullPointerException 其他错误就会消失。 对不起,我真的不明白......我什至无法实现接口 如果是关于实现接口只需按 CTRL + I 并选择您应该覆盖的接口。以上是关于在 Android 片段中使用谷歌地图的主要内容,如果未能解决你的问题,请参考以下文章
getSupportFragmentManager().findFragmentById 为 android 片段中的谷歌地图返回 null?