gpt4 book ai didi

java - 无法解析方法 getMap()

转载 作者:IT老高 更新时间:2023-10-28 23:40:47 34 4
gpt4 key购买 nike

我正在尝试让一个 map fragment 在我的应用程序中工作,但在尝试获取我的 GoogleMap 对象时仍然出现错误。

FragmentWithMap.java

import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;



public class FragmentWithMap extends android.support.v4.app.Fragment {
private OnFragmentInteractionListener mListener;
private static final double LAT = 32.084;
private static final double LON = 34.8878;
Place place;
private GoogleMap mMap;
private View view;
private Marker marker;
int userIcon = FragmentWithDetails.userIcon;

public static FragmentWithMap newInstance(Place place) {
Bundle args = new Bundle();
if (place != null) {
args.putInt("id", place.getId());
args.putString("name", place.getName());
args.putString("address", place.getAddress());
args.putFloat("lat", place.getLat());
args.putFloat("lng", place.getLng());
}
FragmentWithMap fragment = new FragmentWithMap();
fragment.setArguments(args);
return fragment;
}

public FragmentWithMap() {
//empty public constructor
}


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null && getArguments().getString("name") != null) {
place = new Place(getArguments().getInt("id"), getArguments().getString("name"),
getArguments().getString("address"), getArguments().getFloat("lat"),
getArguments().getFloat("lng"));
}
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (view == null) {
view = inflater.inflate(R.layout.fragment_fragment_with_map, container, false);
}
setUpMapIfNeeded();
return view;
}

@Override
public void onDestroyView() {
super.onDestroyView();
android.support.v4.app.Fragment f = getFragmentManager()
.findFragmentById(R.id.fragmnet_container_map);
if (f != null) {
try {
getFragmentManager().beginTransaction().remove(f).commit();
} catch (IllegalStateException ise) {
Log.d("FragmentWithMap", "Already closed");
}
}

ViewGroup parentViewGroup = (ViewGroup) view.getParent();
if (parentViewGroup != null) {
parentViewGroup.removeAllViews();
}
}

public void onButtonPressed(Uri uri) {
if (mListener != null) {
mListener.onFragmentInteraction(uri);
}
}

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (OnFragmentInteractionListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnFragmentInteractionListener");
}
}

@Override
public void onDetach() {
super.onDetach();
mListener = null;
}

public void showPlace(Place place) {
setPlace(place);
setUpMap();
}

public void setPlace(Place place) {
this.place = place;
}


public interface OnFragmentInteractionListener {
public void onFragmentInteraction(Uri uri);
}

private void setUpMapIfNeeded() {
// Do a null check
if (mMap == null) {
// Try to obtain the map from the SupportMapFragment.


Fragment mmm = getChildFragmentManager().findFragmentById(R.id.fragment_map2);
mMap = ((SupportMapFragment) mmm).getMap();

// Check if we were successful
if (mMap != null) {
setUpMap();
}
}
}

private void setUpMap() {
double lat = LAT;
double lng = LON;
String name = "You are here";
if (place != null) {
lat = place.getLat();
lng = place.getLng();
name = place.getName();
}
if (marker != null) {
marker.remove();
}
LatLng position = new LatLng(lat, lng);
MarkerOptions markerOptions = new MarkerOptions().
position(position).
title(name).
icon(BitmapDescriptorFactory.fromResource(userIcon)).
snippet("Your last recorded location");

marker = mMap.addMarker(markerOptions);
if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
mMap.setMyLocationEnabled(true);
CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(position, 15);
mMap.animateCamera(cameraUpdate);
}

}

这是 XML

fragment_with_map.xml

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragment_map2"
tools:context="com.example.eldad.myplacesapp.FragmentWithMap"
android:name="com.google.android.gms.maps.SupportMapFragment"
/>

我从另一个应用程序复制了代码,其中 getMap() 方法只是被弃用了,所以我怀疑问题出在代码本身。我对它被弃用没有任何问题,如果我不需要,我宁愿不使用 getMapAsync()。但是由于某种原因,我收到了错误

"Cannot resolve method 'getMap()'"

。我也收到一个错误

"Error:Execution failed for task ':app:compileDebugJavaWithJavac'.

Compilation failed; see the compiler error output for details."

虽然我不能确定它是否与这个问题有关。

最佳答案

getMap() 方法以前已弃用,现在已被删除。如果您查看 documentation for SupportMapFragment ,它不存在。

您也可以在 release notes 中查看:

The previously-deprecated getMap() function is no longer available in the Google Play services SDK. (It is still available in the Google Play services APK that is delivered to Android devices.) The getMap() function has been deprecated since December 2014. See the release blog post for help with converting from getMap() to getMapAsync().

从博文中:

In December 2014 we deprecated getMap() in favor of getMapAsync(). From this release onwards, you'll need to use getMapAsync() in order to compile your apps.

所以,只需使用 getMapAsync(),很简单。

首先让你的 Fragment 实现 OnMapReadyCallback 接口(interface):

public class FragmentWithMap extends android.support.v4.app.Fragment
implements OnMapReadyCallback {

然后,修改你的 setUpMapIfNeeded() 代码,并添加 onMapReady() 回调:

private void setUpMapIfNeeded() {
if (mMap == null) {
SupportMapFragment mapFrag = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.fragment_map2);
mapFrag.getMapAsync(this);
}
}

@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
setUpMap();
}

关于java - 无法解析方法 getMap(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38232747/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com