无法解析方法getMap() [英] Cannot resolve method getMap()

查看:865
本文介绍了无法解析方法getMap()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述




p> 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); } }



And here's the XML


  

fragment_with_map.xml

这里是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" />



I copied the code from a different app, where the method getMap() is merely deprecated, so I doubt the problem is in the code itself. I have no issue with it being deprecated, and I prefer not to use the getMapAsync() if I don't have to. But here for some reason I recieve the error


  

"Cannot resolve method 'getMap()'"

我从另一个应用程序复制代码,其中方法getMap()仅仅被弃用,所以我怀疑问题出在代码本身。我不推荐使用它,如果不需要,我更喜欢不使用getMapAsync()。但由于某种原因,我收到了错误

. I also recieve an error


无法解析方法'getMap()'

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

。我还收到错误


错误:执行任务失败:app:compileDebugJavaWithJavac'。


编译失败;详情请参阅编译器错误输出。

Though I can't be sure if it's connected to this issue.


虽然我无法确定它是否与此问题有关。

The getMap() method was previously deprecated, and now it's been removed. If you look at the documentation for SupportMapFragment, it's not there.

推荐答案

您也可以在发行说明中查看 a>:
$ b

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().


之前不推荐使用的getMap()函数不再适用于
Google Play服务SDK。 (它仍然可以在Google
Play服务APK中发布到Android设备上。)自2014年12月起,getMap()
函数已被弃用。请参阅发布博客
文章
以获取从getMap()转换为getMapAsync()的帮助。 。

And from the blog post:

从博客文章可以看到:


2014年12月,我们弃用了getMap()以支持getMapAsync()。
从此版本开始,您需要使用getMapAsync()以
的顺序编译您的应用程序。

So, just use getMapAsync(), it's simple.



<

First have your Fragment implement the OnMapReadyCallback interface:

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

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

Then, modify your setUpMapIfNeeded() code, and add the onMapReady() callback:

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

pre $ code > 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();
}

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(); }

这篇关于无法解析方法getMap()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆