2016-09-20 17 views
2

私は現在、マップ上の位置を表示し、後で使用するためにFirebaseに保存するアプリケーションを作成しようとしています。Firebaseを使用している場合のStackoverflowError

これは私のMapsActivityです:私はそれを実行すると

public class MapsActivity extends AppCompatActivity 
     implements OnMapReadyCallback, 
     GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener, LocationListener { 

    GoogleMap googleMap; 
    LocationRequest mLocationRequest; 
    GoogleApiClient mGoogleApiClient; 
    Marker marker; 
    Intent intent; 
    DatabaseReference myRef; 
    FirebaseDatabase database; 
    Longlat longlat; 
    private static final String TAG ="PvCOS"; 

    @Override 
    protected void onCreate (Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_maps); 
     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 

     intent = getIntent(); 
     buildGoogleApiClient(); 
     mGoogleApiClient.connect(); 
     database = FirebaseDatabase.getInstance(); 
     myRef = database.getReference(); 

    } 

    //class to be sent to db 
    public class Longlat { 

     public double longitude; 
     public double latitude; 

     public Longlat() { 
      // Default constructor required for calls to DataSnapshot.getValue(longlat.class) 
     } 

     public Longlat(Double longitude, Double latitude) { 
      this.longitude = longitude; 
      this.latitude = latitude; 
     } 

    } 

    protected synchronized void buildGoogleApiClient() { 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(LocationServices.API) 
       .build(); 
    } 

    @Override 
    public void onMapReady(GoogleMap map) { 

     googleMap = map; 
     setUpMap(); 
    } 

    public void setUpMap() { 
     try { 
      googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
      googleMap.setMyLocationEnabled(true); 
      googleMap.getUiSettings().setZoomControlsEnabled(true); 
     } catch (SecurityException se){ 
      // TODO: 20/09/2016 handle exception 
     } 
    } 

    @Override 
    public void onConnected(Bundle bundle) { 
     try { 
      mLocationRequest = new LocationRequest(); 
      mLocationRequest.setInterval(10); 
      mLocationRequest.setFastestInterval(10); 
      mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); 

      LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,  mLocationRequest, this); 
     } catch (SecurityException se){ 
      // TODO: 20/09/2016 handle exception 
     } 
    } 

    @Override 
    public void onConnectionSuspended(int i) { 

    } 

    @Override 
    public void onLocationChanged(Location location) { 

     //save to server 
     longlat = new  Longlat(location.getLongitude(),location.getLatitude()); 
     myRef.child("users").child(intent.getStringExtra("name")).setValue(longlat); 
     LatLng latLng = new LatLng(location.getLatitude(),  location.getLongitude()); 
     marker = googleMap.addMarker(new MarkerOptions() 
       .position(latLng) 
       .title(intent.getStringExtra("name")) 
       .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED))); 

    } 


    @Override 
    public void onConnectionFailed(ConnectionResult connectionResult) { 

    } 
    protected void onStop() { 
     //unregister location updates 
     LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); 

     //remove previously placed Marker 
     if (marker != null) { 
      marker.remove(); 
     } 
     super.onStop(); 
    } 

} 

、私はlogcatで白い画面と、このエラーが出る:エラーを引き起こしているそのFirebase一部

09-20 13:18:25.206 21875-21875/grp6.PvCOS E/UncaughtException: java.lang.StackOverflowError: stack size 8MB 
at  java.lang.reflect.Method.invoke(Native Method) 
at  com.google.android.gms.internal.zzaln$zza.zzce(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzbw(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzcd(Unknown Source) 
at  com.google.android.gms.internal.zzaln$zza.zzce(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzbw(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzcd(Unknown Source) 
at  com.google.android.gms.internal.zzaln$zza.zzce(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzbw(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzcd(Unknown Source) 
at  com.google.android.gms.internal.zzaln$zza.zzce(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzbw(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzcd(Unknown Source) 
at  com.google.android.gms.internal.zzaln$zza.zzce(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzbw(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzcd(Unknown Source) 
at  com.google.android.gms.internal.zzaln$zza.zzce(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzbw(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzcd(Unknown Source) 
at  com.google.android.gms.internal.zzaln$zza.zzce(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzbw(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzcd(Unknown Source) 
at  com.google.android.gms.internal.zzaln$zza.zzce(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzbw(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzcd(Unknown Source) 
at  com.google.android.gms.internal.zzaln$zza.zzce(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzbw(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzcd(Unknown Source) 
at  com.google.android.gms.internal.zzaln$zza.zzce(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzbw(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzcd(Unknown Source) 
at  com.google.android.gms.internal.zzaln$zza.zzce(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzbw(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzcd(Unknown Source) 
at  com.google.android.gms.internal.zzaln$zza.zzce(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzbw(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzcd(Unknown Source) 
at  com.google.android.gms.internal.zzaln$zza.zzce(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzbw(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzcd(Unknown Source) 
at  com.google.android.gms.internal.zzaln$zza.zzce(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzbw(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzcd(Unknown Source) 
at  com.google.android.gms.internal.zzaln$zza.zzce(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzbw(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzcd(Unknown Source) 
at  com.google.android.gms.internal.zzaln$zza.zzce(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzbw(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzcd(Unknown Source) 
at  com.google.android.gms.internal.zzaln$zza.zzce(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzbw(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzcd(Unknown Source) 
at  com.google.android.gms.internal.zzaln$zza.zzce(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzbw(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzcd(Unknown Source) 
at  com.google.android.gms.internal.zzaln$zza.zzce(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzbw(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzcd(Unknown Source) 
at  com.google.android.gms.internal.zzaln$zza.zzce(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzbw(Unknown Source) 
at  com.google.android.gms.internal.zzaln.zzcd(Unknown Source) 
at  com.google.android.gms.internal.zzaln$zza.zzce(Unknown Source) 
at  com.google.android.gms.inter   

かなり確信して、あまりにも大きかったFirebaseで画像を送ろうとしている人について別のスレッドを見つけたので、私が送るのは単純なオブジェクトです。

+0

私のためにsetValue()を呼び出すとき、StackOverflowErrorの別の原因は、実際にはPOJOプロパティではないプロパティの束を含むPOJOを保存しようとしていました。 POJO。 私は何をすべき – Eliot

答えて

0

Firebaseで新しい子をどのように作成するのか誤解しました。 。 は私が.child

 myRef = database.getReference("PvCOS/users"); 

myRef.child( "ユーザー")子(intent.getStringExtra( "名前"))でそれらを追加しようとしたのsetValue(longlat)。

しかし、私の参照を取得するときに私はちょうど子供たちが追加されている必要があります:私は同じ問題を経験している

 myRef = database.getReference("PvCOS/users"+name); 
     myRef.setValue(longlat); 
+0

を使用しているときに簡単なデータ転送とコードの可読性のための単純なJavaクラスですが、 'push()'を使用すると新しい子を作成するのに十分です –

+0

これは私の問題を解決しませんでした。私の質問を参照してくださいhttp://stackoverflow.com/q/40317713/3671509 –

1

firebaseのノードのJSONツリーへの参照が必要です。このコードを親切にチェックしてください。

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference myRef = database.getReference("PvCOS/users"); 
+0

私のJSONツリーは {:{ "ユーザー":{ "frede":{ "LAT":123、 "長い" 123 } } } "PvCOS"}です私が新しい子供を作成したいときに参照を書く – fredeaf

+0

私はコードを更新しました。それをチェックしてください –

+0

はエラーを取り除かなかった – fredeaf

0

:StackOverflowの例外をsaveValueメソッドを使用して、私のオブジェクトを保存しようとしているとき。

私の場合、問題は誤った参照のためではなく、AndroidのUriオブジェクトをクラスのフィールドとして使用しているためです。 Firebaseはそれらを保存できないので、私はそれらをStringで置き換えることを強いられました。

関連する問題