2016-07-30 92 views
0

嘗試使用3個按鈕(具有固定位置)在Google Map API v2上創建應用程序 - 但如果單擊其中一個應用程序崩潰與消息:Google Map API v2:java.lang.IllegalStateException:無法執行android的方法:onClick

PID:25216 java.lang.IllegalStateException: 無法爲機器人執行方法,包括:在的onClick $ android.support.v7.app.AppCompatViewInflater DeclaredOnClickListener.onClick AppCompatViewInflater.java:293)

這裏是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); 
    } 
} 

請告訴我,什麼是錯的代碼?

+0

你可以發表你的日誌錯誤? –

+0

是的,下面的鏈接: https://gyazo.com/fa0ee5d48879929fceef3c932787d144 –

回答

0

可能是 GoogleMap映射未初始化,可能是您正在獲得NullPointer異常。可以幫助,如果你發佈日誌。

after mapFragment.getMapAsync(this);此行之後添加此看到

googleMap= mapFragment.getMap(); 
+0

googleMap = mapFragment.getMap(); 此代碼不起作用:無法解析方法getMap(); 該方法未列出( –

相關問題