2017-01-16 5 views
0

Firebaseデータベースからデータを読み込み、それらのアイテムから配列を作成し、その配列リストのマーカーでマップを作成しようとしています。onDataChangeメソッドの内部での作業Android Firebaseデータベース

しかし、私は活動を実行しようとすると、私はこの例外を取得:ここ

java.lang.NullPointerException: Attempt to invoke virtual method 
'com.google.android.gms.maps.model.Marker 
com.google.android.gms.maps.GoogleMap.addMarker(com.google.android.gms.maps.model.MarkerOptions)' 
on a null object reference 

は私のコードです。ご理解のためにコメントをお読みください。

 mLocationDatabaseReference.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      for (DataSnapshot dsp : dataSnapshot.getChildren()) { 
       LocationCurrent post = dsp.getValue(LocationCurrent.class); 
       Double latitude = Double.parseDouble(post.getLatitude()); 
       Double longitude = Double.parseDouble(post.getLongitude()); 
       currentLocationLatLng = new LatLng(latitude, longitude); 
       latlngs.add(currentLocationLatLng); 


       //Logging works fine I see all items of the latlngs array 
       Log.i("LAT LONGS IN", String.valueOf(latlngs)); 

       //Same Exception points here 
       for(int i = 0 ; i < latlngs.size() ; i++) { 

        createMarker(latlngs.get(i)); 
       } 

      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 


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


@Override 
public void onMapReady(GoogleMap googleMap) { 

} 
//Exception points here too 
protected Marker createMarker(LatLng latlngmthd) { 

    return mMap.addMarker(new MarkerOptions() 
      .position(latlngmthd) 
      .anchor(0.5f, 0.5f)); 
} 

私の意見では、onDataChangeメソッド内のデータを処理する必要がありますが、マップオブジェクトは例外からわかるようにそこに作成されません。 onDataChange内でonMapReadyを移動することはできません。どのように私はマップオブジェクトを作成し、onDataChangeメソッド内のマーカーでそれを設定することができますどのような提案を誰も知っている?

答えて

0

nMapは正しく初期化されておらず、nullです。投稿したonMapReady()メソッドが空です。このメソッドは、マップの使用準備が整うと呼び出されます。マップオブジェクトを取得するためのステートメントが含まれている必要があります。マップの準備ができるまで、リスナーを追加する必要もありません。次のように同じ方法で移動することができます。

@Override 
public void onMapReady(GoogleMap googleMap) { 
    nMap = googleMap; 
    mLocationDatabaseReference.addListenerForSingleValueEvent(...); 
} 
関連する問題