2016-03-12 22 views
-1

我是大學的法語學生,我必須製作一個使用Google Map的Android應用程序。不幸的是,當我嘗試在手機上使用我的應用程序時遇到問題:當我嘗試使用GoogleMap訪問該部分時,應用程序關閉。 感謝您的幫助。致命異常java.lang.RuntimeException:無法啓動活動

package darknesshadow.localisation; 

import android.content.pm.PackageManager; 
import android.os.Bundle; 
import android.support.v4.content.ContextCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.widget.Toast; 

import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.Marker; 
import com.google.android.gms.maps.model.MarkerOptions; 
import com.google.android.gms.maps.MapFragment; 

public class MapsActivity extends AppCompatActivity implements LocationListener{ 

    //Declaration des Variables 
    private GoogleMap gMap; 
    private LocationManager locationManager; 
    private Marker marker; 


    //Méthodes 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_maps); 

     gMap = ((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap(); 
     marker = gMap.addMarker(new MarkerOptions().title("Vous êtes ici").position(new LatLng(0, 0))); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 

     locationManager = (LocationManager) this.getSystemService(LOCATION_SERVICE); 
     if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){ 
      activationGPS(); 
     } 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     desactivationGPS(); 
    } 

    public void activationGPS() { 
     if ((ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) 
       && (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)) { 
      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10, this); 
     } 
    } 

    public void desactivationGPS() { 
     if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED 
       && ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      locationManager.removeUpdates(this); 
     } 
    } 

    @Override 
    public void onLocationChanged(final Location location) { 
     final StringBuilder msg = new StringBuilder("lat : "); 
     msg.append(location.getLatitude()); 
     msg.append("; lng : "); 
     msg.append(location.getLongitude()); 
     Toast.makeText(this, msg.toString(), Toast.LENGTH_SHORT).show(); 
     final LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); 
     gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15)); 
     marker.setPosition(latLng); 

    } 

    @Override 
    public void onProviderDisabled(final String provider) { 
     if ("gps".equals(provider)) { 
      desactivationGPS(); 
     } 
    } 

    @Override 
    public void onProviderEnabled(final String provider) { 
     if ("gps".equals(provider)) { 
      activationGPS(); 
     } 
    } 

    @Override 
    public void onStatusChanged(final String provider, final int status, final Bundle extras) { 
    } 
} 

的清單:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="darknesshadow.localisation" 
    android:versionCode="1" 
    android:versionName="1.0" > 

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

    <uses-sdk 
     android:minSdkVersion="9" 
     android:targetSdkVersion="17" /> 

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

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <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" /> 


    <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.geo.API_KEY" 
      android:value="@string/google_maps_key" /> 

     <meta-data 
      android:name="com.google.android.gms.version" 
      android:value="@integer/google_play_services_version" 
      /> 

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

     <activity 
      android:name=".NouveauTrajet" 
      android:label="Nouveau Trajet"> 
     </activity> 

     <activity 
      android:name=".Tab" 
      android:label="Tab"> 
     </activity> 

     <activity 
      android:name=".OngletAcceuil" 
      android:label="OngletAcceuil"> 
     </activity> 

     <activity 
      android:name=".Onglet1" 
      android:label="Onglet1"> 
     </activity> 

     <activity 
      android:name=".Onglet2" 
      android:label="Onglet2"> 
     </activity> 

     <activity 
      android:name=".Onglet3" 
      android:label="Onglet3"> 
     </activity> 

     <activity 
      android:name=".Onglet4" 
      android:label="Onglet4"> 
     </activity> 

     <activity 
      android:name=".MapsActivity" 
      android:label="@string/title_activity_maps"> 
     </activity> 

    </application> 

</manifest> 

的XML:

fragment 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/map" 
android:name="com.google.android.gms.maps.SupportMapFragment" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
xmlns:map="http://schemas.android.com/apk/res-auto" 
/> 

和Android監控:

03-12 19:01:38.881 17146-17146/darknesshadow.localisation E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: darknesshadow.localisation, PID: 17146 
                     java.lang.RuntimeException: Unable to start activity ComponentInfo{darknesshadow.localisation/darknesshadow.localisation.MapsActivity}: java.lang.NullPointerException 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2187) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2236) 
                      at android.app.ActivityThread.access$800(ActivityThread.java:138) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:136) 
                      at android.app.ActivityThread.main(ActivityThread.java:5095) 
                      at java.lang.reflect.Method.invokeNative(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:515) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 
                      at dalvik.system.NativeStart.main(Native Method) 
                     Caused by: java.lang.NullPointerException 
                      at darknesshadow.localisation.MapsActivity.onCreate(MapsActivity.java:33) 
                      at android.app.Activity.performCreate(Activity.java:5231) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2151) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2236)  
                      at android.app.ActivityThread.access$800(ActivityThread.java:138)  
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199)  
                      at android.os.Handler.dispatchMessage(Handler.java:102)  
                      at android.os.Looper.loop(Looper.java:136)  
                      at android.app.ActivityThread.main(ActivityThread.java:5095)  
                      at java.lang.reflect.Method.invokeNative(Native Method)  
                      at java.lang.reflect.Method.invoke(Method.java:515)  
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)  
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)  
                      at dalvik.system.NativeStart.main(Native Method)  

回答

0

在你指的是SupportMapFragment佈局文件,但在活動使用的是MapFragment, 更改佈局XML文件MapFragment

+0

謝謝!但現在我必須解決一些問題,因爲我的本地化非常糟糕 – Darknesshadow

0

你已經有了一個空指針無論是在片段經理或地圖片段。當您使用AppCompatActivity時,請嘗試getSupportFragmentManager()而不是getFragmentManager()。

+0

感謝,但現在我在句子中的probleme。我是否也應該先取代「MapFragment」? – Darknesshadow

相關問題