当前位置: 首页 > 知识库问答 >
问题:

在Android Fragment中使用Google地图

养淇
2023-03-14

我正在开发一个使用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个答案

田向荣
2023-03-14

可能您的mMapFraank为空。确保它不为空。如果是,也许这个链接可能会有所帮助。

 类似资料:
  • 我制作了一个应用程序,在其中我显示了一个谷歌地图,在我的位置上有GPS定位标记。这张地图在第一个选项卡上,我还有两个其他选项卡,如下图所示 现在我面临一个问题,即当我从选项卡1移动到选项卡2,然后移动到选项卡1时,它工作得很好,但当我移动到选项卡3,然后再移回选项卡1或选项卡2时,应用程序崩溃,并在LogCat中出现以下异常: 它在以下点显示错误: 无论我选择任何选项卡,它都会在上面一行显示错误,

  • 我正在寻找的是一种避免必须“手动”找到。有没有办法自动让地图以三个坐标为中心?

  • 本文向大家介绍php使用google地图应用实例,包括了php使用google地图应用实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php使用google地图应用方法。分享给大家供大家参考。具体如下: php代码如下: html页面如下: 希望本文所述对大家的php程序设计有所帮助。

  • 问题内容: 我正在尝试将Google Maps地理编码器与Python和JSON结合使用,但一直被告知我有一个错误的请求: 失败。 但是如果我只是复制粘贴 放入浏览器栏中,效果很好。 我的要求出了什么问题? 问题答案: 您需要一些URL引用编码,这可以工作: 行 加法= urllib2.quote(ADD) 是重要的一点。如果您使用的是非拉丁字符,则建议Google API需要UTF-8编码。

  • 如何在react-google-maps中更改defaultCenter?我需要找到我的地理定位并更改缺省值lat和LNG。 接下来,我需要将数据传输到组件MapWithAMarker:ecenter={myLocation}和Marker position={myLocation}

  • 请有人帮助我改变我的代码,使谷歌地图API能够请求一个地址在它的地方,因为我想读取地址的用户直接从mySQL数据库。