StackoverflowError when using Firebase

感情迁移 提交于 2020-01-04 11:03:48

问题


I'm currently trying to make an app that will show you a position on a map whilst also saving it to Firebase for later use.

This is my 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();
    }

}

When I run it, I get a white screen and this error in logcat:

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        

Pretty sure its the Firebase part that's causing the error, as I found another thread about someone trying to send a picture over Firebase which was too big, but all I'm sending is a simple object.


回答1:


You must have reference to the Node of JSON tree in firebase. kindly check this code.

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



回答2:


I have experienced the same problem : StackOverflow Exception while trying to save my object using saveValue method.

But in my case problem was not because of wrong reference but because of using Android's Uri object as a field of my class. Firebase can't save them, so I was forced to replace them with String.




回答3:


I had just misunderstood how you create new children in Firebase. I tried to add them with .child()

myRef = database.getReference("PvCOS/users");
myRef.child("users").child(intent.getStringExtra("name")).setValue(longlat);

But I should have just added the children when getting my reference:

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


来源:https://stackoverflow.com/questions/39593122/stackoverflowerror-when-using-firebase

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!