2015-07-07 2 views
0

У меня есть активность в Google Картах. suddently он закрывается, потому что getMap() (java null pointer exeption) не работает. Я переустановил несколько старых апк, которые отлично работали, но все же они закрываются. Так что это должно быть что-то на устройстве или так, что может быть причиной?Google Maps возвращает null

private GoogleMap googleMap; 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
try { 
     if(googleMap == null) { 
      googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); 
     } 

Вот файл XML

<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" 
tools:context=".MainActivity"> 

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

Logcat:

java.lang.RuntimeException: Unable to start activity ComponentInfo{de.mareike.cityexplorer/de.mareike.cityexplorer.MainActivity}: java.lang.NullPointerException 
Caused by: java.lang.NullPointerException 
     at com.google.l.a.ce.a(Unknown Source) 
     at com.google.maps.api.android.lib6.d.eg.<init>(Unknown Source) 
     at com.google.maps.api.android.lib6.d.ef.a(Unknown Source) 
     at com.google.maps.api.android.lib6.d.aq.<init>(Unknown Source) 
     at com.google.maps.api.android.lib6.d.ft.a(Unknown Source) 
     at com.google.android.gms.maps.internal.l.onTransact(SourceFile:167) 
     at android.os.Binder.transact(Binder.java:380) 
     at com.google.android.gms.maps.internal.IGoogleMapDelegate$zza$zza.addMarker(Unknown Source) 
     at com.google.android.gms.maps.GoogleMap.addMarker(Unknown Source) 
     at de.mareike.cityexplorer.MainActivity.onCreate(MainActivity.java:88) 
+0

Опубликовать сообщение. Вы включили все, что требуется? –

+0

Опубликуйте также свой логарифм. –

+0

Я отредактировал мой вопрос – maidi

ответ

1

Согласно here, метод getMap() является устаревшим, и вы должны использовать getMapAsync(OnMapReadyCallback) вместо этого.

Пример кода:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
    } 

    @Override 
    public void onMapReady(GoogleMap map) { 
     // Add a marker in Sydney, Australia, and move the camera. 
     LatLng sydney = new LatLng(-34, 151); 
     map.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); 
     map.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 10)); 

    } 
} 

и activity_main.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/map" 
      tools:context=".MapsActivity" 
      android:name="com.google.android.gms.maps.SupportMapFragment"/> 

Для получения более подробной информации, пожалуйста, смотрите официальный документ here.

+0

Но я не использую FragmentActivity, а ActionBarActivity. Как я могу реализовать OnMapReadyCallback? – maidi

+0

Точно так же просто измените 'FragmentActivity' на' ActionBarActivity'. Поскольку «ActionBarActivity» также устарел, вы можете вместо этого использовать «AppCompatActivity». – bjiang

0

Проверьте раскладку activity_main должен содержит фрагмент, имеющий идентификатор карта

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

. странно то, что я также тестировал старые файлы apk, которые когда-то работали и теперь потихоньку не так, я ничего не менял в коде ... Я злюсь :( – maidi

+0

опубликуйте свой логарифм или стек. о том, почему эта ошибка возникает. –

+0

Это происходит, когда первый маркер установлен из-за java.lang.NullPointerException – maidi

Смежные вопросы