2017-09-21 19 views
2

私はこのプロジェクトを位置追跡に基づいています。これは、1つのアプリケーションがGPS座標をfirebaseにプッシュする2つのモバイルアプリケーションで構成されています。そして他のアプリケーションは座標を取得します。座標を取得して緯度と高度に設定すると、アプリケーションは例外やエラーなしでクラッシュします。何が私はここで間違っている?私はこれを正しい方法でやっていますか? I LatLngオブジェクトにハードコード緯度と経度、マーカーはエラーなしでアプリに表示されている場合は、次のfirebaseのマップ座標を取得し、googleマップのプロット

は...

@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 
    DatabaseReference myRef; 

    final Double[] latitu = {7.02343187}; 
    final Double[] longitu = {79.89658312}; 

    myRef = FirebaseDatabase.getInstance().getReference("appontrain").child("location"); 
    myRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      latitu[0] = (Double) dataSnapshot.child("lat").getValue(); 
      longitu[0] = (Double) dataSnapshot.child("lon").getValue(); 

      Log.d("LatLon", latitu[0] + longitu[0] +""); 
      Toast.makeText(LiveTrain.this, latitu[0].toString()+" - "+ longitu[0].toString(), Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.w("Exception FB",databaseError.toException()); 
     } 
    }); 

    LatLng trainLocation = new LatLng(latitu[0], longitu[0]); 

    mop = new MarkerOptions(); 
    mop.position(trainLocation); 
    mop.title("Train: Muthu Kumari"); 
    mop.icon(icon); 
    mMap.addMarker(mop); 

    mMap.moveCamera(CameraUpdateFactory.newLatLng(trainLocation)); 
    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(trainLocation,13f)); 
} 

私のコードです。 firebaseから値を設定するとクラッシュします。私を助けてください!

後は、DB階層以下に示しlogcat

09-22 00:40:41.731 2711-2744/com.smartraveller.srt D/FA: Logging event (FE): app_exception(_ae), Bundle[{firebase_event_origin(_o)=crash, firebase_screen_class(_sc)=LiveTrain, firebase_screen_id(_si)=4621265793058976305, timestamp=1506021041714, fatal=1}] 
09-22 00:40:41.831 5050-2755/? V/FA-SVC: Logging event: origin=crash,name=app_exception(_ae),params=Bundle[{firebase_event_origin(_o)=crash, firebase_screen_class(_sc)=LiveTrain, firebase_screen_id(_si)=4621265793058976305, timestamp=1506021041714, fatal=1}] 
09-22 00:40:41.841 5050-2755/? V/FA-SVC: Saving event, name, data size: app_exception(_ae), 86 
09-22 00:40:41.841 5050-2755/? V/FA-SVC: Event recorded: Event{appId='com.smartraveller.srt', name='app_exception(_ae)', params=Bundle[{firebase_event_origin(_o)=crash, firebase_screen_class(_sc)=LiveTrain, firebase_screen_id(_si)=4621265793058976305, timestamp=1506021041714, fatal=1}]} 

です。

Firebase DB Hierarchy

+0

シェアは、データベース –

+0

の絵をありがとうございます。 –

+0

logcatに例外のスタックトレースがないと考えるのは難しいです。 Android Studioのlogcatを見ている場合は、フィルタが設定されていないことを確認してください。 –

答えて

1

onMapreadyコールバック内のすべてのfirebaseコードを移動します。この

@Override 
public void onMapReady(GoogleMap googleMap) { 
mMap = googleMap; 
DatabaseReference myRef; 

final Double[] latitu = {7.02343187}; 
final Double[] longitu = {79.89658312}; 

myRef = FirebaseDatabase.getInstance() 
.getReference().child("location"); 
myRef.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot 
dataSnapshot) 
{ 
     latitu[0] = (Double) 
dataSnapshot.child("lat").getValue(); 
     longitu[0] = (Double) 
dataSnapshot.child("lon").getValue(); 

     Log.d("LatLon", latitu[0] + longitu[0] +""); 
     Toast. 
makeText(LiveTrain.this, latitu[0].toString()+" - "+ 
longitu[0].toString(), Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) 
{ 
     Log.w("Exception FB",databaseError.toException()); 
    } 
}); 

LatLng trainLocation = new LatLng(latitu[0], longitu[0]); 

mop = new MarkerOptions(); 
mop.position(trainLocation); 
mop.title("Train: Muthu Kumari"); 
mop.icon(icon); 
mMap.addMarker(mop); 
mMap 
.moveCamera(CameraUpdateFactory 
.newLatLng(trainLocation)); 
mMap 
.animateCamera(CameraUpdateFactory 
.newLatLngZoom(trainLocation,13f)); 
} 

役立ちます:)

+0

問題はまだそこにあります! –

+0

更新された回答を確認してください –

+0

助けが –

0

修正したコードを希望のように。私はデータベースの絵と質問を編集した@MalikAhsanあなたのすべての

@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 

    final Double[] latitu = {7.02343187}; 
    final Double[] longitu = {79.89658312}; 

    DatabaseReference myRef = FirebaseDatabase.getInstance().getReference().child("location"); 
    myRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      latitu[0] = (Double) dataSnapshot.child("lat").getValue(); 
      longitu[0] = (Double) dataSnapshot.child("lon").getValue(); 

      Log.d("LatLon", latitu[0] + longitu[0] +""); 
      Toast.makeText(LiveTrain.this, latitu[0].toString()+" - "+ longitu[0].toString(), Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.w("Exception FB",databaseError.toException()); 
     } 
    }); 

    LatLng trainLocation = new LatLng(latitu[0], longitu[0]); 

    mop = new MarkerOptions(); 
    mop.position(trainLocation); 
    mop.title("Train: Muthu Kumari"); 
    mop.icon(icon); 
    mMap.addMarker(mop); 

    mMap.moveCamera(CameraUpdateFactory.newLatLng(trainLocation)); 
    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(trainLocation,13f)); 
} 
関連する問題