【问题标题】:Google Map API v2: java.lang.IllegalStateException: Could not execute method for android:onClickGoogle Map API v2:java.lang.IllegalStateException:无法执行 android:onClick 的方法
【发布时间】:2016-07-30 16:54:06
【问题描述】:

尝试在具有固定位置的 3 个按钮的 Google Map API v2 上制作应用程序 - 但如果我单击其中一个按钮,应用程序会崩溃并显示消息:

PID: 25216 java.lang.IllegalStateException: 无法在 android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick AppCompatViewInflater.java:293 处执行 android:onClick 的方法)

这里是activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.malenik.example.mygoogleapimaps.MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="City"
        android:id="@+id/btnCity"
        android:enabled="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:onClick="onClick_City"
        android:nestedScrollingEnabled="false" />

    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.MapFragment"
        android:layout_below="@+id/btnCity"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Bortnichi"
        android:id="@+id/btnBortnichi"
        android:layout_alignTop="@+id/btnBratislavska"
        android:layout_alignRight="@+id/map"
        android:layout_alignEnd="@+id/map"
        android:nestedScrollingEnabled="false"
        android:onClick="onClick_Bortnichi" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Bratislavska"
        android:id="@+id/btnBratislavska"
        android:layout_alignTop="@+id/btnCity"
        android:layout_centerHorizontal="true"
        android:onClick="onClick_Bratislavska" />

</RelativeLayout>

清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.malenik.example.mygoogleapimaps">

    <uses-sdk android:minSdkVersion="15"/>

    <permission 
        android:name="com.malenik.example.mygoogleapimaps.permission.MAPS_RECEIVE"
        android:protectionLevel="signature"/>
    <uses-permission android:name="com.malenik.example.mygoogleapimaps.permission.MAPS_RECEIVE"/>

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true"/>


    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="AIzaSyAM098olhG-MvsjIivmhdCwA_vSw2GjVT4"/>

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

和 MainActivity:

    public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
        private final LatLng LOCATION_BRATISLAVSKA = new LatLng(50.489402, 30.609111);
        private final LatLng LOCATION_BORTNICHI = new LatLng(50.383452, 30.699068);
        private final LatLng LOCATION_CITY = new LatLng(50.451188, 30.522566);
        private GoogleMap googleMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap map) {
        map.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker"));
        map.addMarker(new MarkerOptions().position(new LatLng(10.699160, 122.547208)).title("San Pedro Molo Terminal"));
        map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for ActivityCompat#requestPermissions for more details.
            return;
        }
        map.setMyLocationEnabled(true);
        map.setTrafficEnabled(true);
        map.setIndoorEnabled(true);
        map.setBuildingsEnabled(true);
        map.getUiSettings().setZoomControlsEnabled(true);

    }


    public boolean onCreateOptionsMenu(Menu menu){
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public void onClick_City(View view){
        Button btnCity = (Button)findViewById(R.id.btnCity);
        googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
        CameraUpdate update = CameraUpdateFactory.newLatLngZoom(LOCATION_CITY, 16);
        googleMap.animateCamera(update);

    }

    public void onClick_Bratislavska(View view){
        Button btnBratislavska = (Button)findViewById(R.id.btnBratislavska);
        googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
        CameraUpdate update = CameraUpdateFactory.newLatLngZoom(LOCATION_BRATISLAVSKA, 18);
        googleMap.animateCamera(update);
    }

    public void onClick_Bortnichi(View view){
        Button btnBortnichi = (Button)findViewById(R.id.btnBortnichi);
        googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
        CameraUpdate update =  CameraUpdateFactory.newLatLngZoom(LOCATION_BORTNICHI, 20);
        googleMap.animateCamera(update);
    }
}

请告诉我这段代码有什么问题?

【问题讨论】:

标签: java android google-maps


【解决方案1】:

可能是 GoogleMap 映射未初始化,可能是您遇到了 NullPointer 异常。如果您发布日志可以提供帮助。

after mapFragment.getMapAsync(this);在这行后面加上这个看看

googleMap= mapFragment.getMap();

【讨论】:

  • googleMap= mapFragment.getMap();此代码不起作用:无法解析方法 getMap();该方法未列出(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多