help shared preferences

1

I want to save a location with shared preferences as I can not save objects I only save the latitude and longitude, I transform it into string I save them and then I take them out and transform them into double back to load them to the location variables I had but I miss error and I can not fix it.

This is the method to load the preferences which I call from oncreate :

public void cargarpreferencias(){
    SharedPreferences preferences = getSharedPreferences("localizaciones", Context.MODE_PRIVATE);
    String latcasastr = preferences.getString("latcasa","a");
    double latitudcasa=Double.parseDouble(latcasastr);

    String longcasastr = preferences.getString("longcasa",null);
    double longitudcasa=Double.parseDouble(longcasastr);

    String lattrabajostr = preferences.getString("lattrabajo",null);
    double latitudrabajo=Double.parseDouble(lattrabajostr);

    String longtrabajostr = preferences.getString("longtrabajo",null);
    double longitudtrabajo=Double.parseDouble(longtrabajostr);

    String latfacultadstr = preferences.getString("latfacultad",null);
    double latitudfacultad=Double.parseDouble(latfacultadstr);

    String longfacultadstr = preferences.getString("longfacultad",null);
    double longitudfacultad=Double.parseDouble(longfacultadstr);

    loccasa.setLatitude(latitudcasa);
    loctrabajo.setLatitude(latitudrabajo);
    locfacultad.setLatitude(latitudfacultad);
    loccasa.setLongitude(longitudcasa);
    loctrabajo.setLongitude(longitudtrabajo);
    locfacultad.setLongitude(longitudfacultad);
}

This is the code I use to save the preferences that would be working well:

public void guardarpreferencias() {
    SharedPreferences preferences = getSharedPreferences("localizaciones", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    String latcasastr = String.valueOf(latcasa);
    editor.putString("latcasa",latcasastr);
    String longcasastr = String.valueOf(longcasa);
    editor.putString("longcasa",longcasastr);
    String lattrabajostr = String.valueOf(latrabajo);
    editor.putString("lattrabajo",lattrabajostr);
    String longtrabajostr = String.valueOf(longtrabajo);
    editor.putString("longtrabajo",longtrabajostr);
    String latfacultadstr = String.valueOf(latfacultad);
    editor.putString("latfacultad",latfacultadstr);
    String longfacultadstr = String.valueOf(longfacultad);
    editor.putString("longfacultad",longfacultadstr);
    editor.commit();
}

Error:

  

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.location.Location.setLatitude (double)' on a null object reference           at com.example.houth.ubicaciontp.MainActivity.chargepreferences (MainActivity.java:286)           at com.example.houth.ubicaciontp.MainActivity $ 1.onLocationResult (MainActivity.java:61)

    
asked by Houth 04.07.2018 в 00:57
source

1 answer

1

First define a default value of "0" (or the numeric value you want as default) so that it is converted without problem to Double , avoid using null in this case:

String longcasastr = preferences.getString("longcasa","0");
double longitudcasa=Double.parseDouble(longcasastr);

String lattrabajostr = preferences.getString("lattrabajo","0");
double latitudrabajo=Double.parseDouble(lattrabajostr);

String longtrabajostr = preferences.getString("longtrabajo","0");
double longitudtrabajo=Double.parseDouble(longtrabajostr);

String latfacultadstr = preferences.getString("latfacultad","0");
double latitudfacultad=Double.parseDouble(latfacultadstr);

String longfacultadstr = preferences.getString("longfacultad","0");
double longitudfacultad=Double.parseDouble(longfacultadstr);

Second, you are not initializing the variables loccasa , loctrabajo , locfacultad , etc:

loccasa.setLatitude(latitudcasa);
loctrabajo.setLatitude(latitudrabajo);
locfacultad.setLatitude(latitudfacultad);
loccasa.setLongitude(longitudcasa);
loctrabajo.setLongitude(longitudtrabajo);
locfacultad.setLongitude(longitudfacultad);

for this reason you get the error:

  

NullPointerException: Attempt to invoke virtual method 'void   android.location.Location.setLatitude (double) 'on a null object   reference

    
answered by 04.07.2018 / 01:28
source