共享首选项不起作用,Java android

共享首选项不起作用,Java android,java,android,maps,sharedpreferences,Java,Android,Maps,Sharedpreferences,我无法在共享首选项中保存或检索数据。我有多种活动。 我不确定哪里出了错。 当我运行应用程序时,它工作正常,只是数据没有像我希望的那样永久存储 package com.obhan.weather; public class MapsActivity extends FragmentActivity implements OnMapReadyCallback,GoogleMap.OnMapLongClickListener { private GoogleMap mMap; L

我无法在共享首选项中保存或检索数据。我有多种活动。 我不确定哪里出了错。 当我运行应用程序时,它工作正常,只是数据没有像我希望的那样永久存储

package com.obhan.weather;


public class MapsActivity extends FragmentActivity implements OnMapReadyCallback,GoogleMap.OnMapLongClickListener {

    private GoogleMap mMap;
    LocationManager locationManager;
    LocationListener locationListener;

    public void centerMapOnLocation(Location location, String title) {
        LatLng userLocation = new LatLng(location.getLatitude(), location.getLongitude());
        //  mMap.clear();
        if(title != "Your Location"){
            mMap.addMarker(new MarkerOptions().position(userLocation).title(title));

        }
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(userLocation, 10));

    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(grantResults.length > 0 && grantResults[0]==PackageManager.PERMISSION_GRANTED){
            if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)== PackageManager.PERMISSION_GRANTED){
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener);
                Location lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                centerMapOnLocation(lastKnownLocation,"Your Location");
            }
        }

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }


    @Override
    public void onMapReady(GoogleMap googleMap) {
        

      

        mMap = googleMap;
        mMap.clear();
        mMap.setOnMapLongClickListener((GoogleMap.OnMapLongClickListener) this);
        Intent intent = getIntent();
        if (intent.getIntExtra("PlaceNumber", 0) == 0) {
            //zoom in to users location
            locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
            locationListener = new LocationListener() {
                @Override
                public void onLocationChanged(Location location) {
                    centerMapOnLocation(location, "Your Location");

                }

                @Override
                public void onStatusChanged(String provider, int status, Bundle extras) {

                }

                @Override
                public void onProviderEnabled(String provider) {

                }

                @Override
                public void onProviderDisabled(String provider) {

                }
            };
            if (Build.VERSION.SDK_INT < 23) {
                if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                    // TODO: Consider calling
                    //    ActivityCompat#requestPermissions
                    // here to request the missing permissions, and then overriding
                    //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                    //                                          int[] grantResults)
                    // to handle the case where the user grants the permission. See the documentation
                    // for ActivityCompat#requestPermissions for more details.
                    return;
                }
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
            }else
            {
                if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)!=PackageManager.PERMISSION_GRANTED){
                    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},1);
                }else{
                    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener);

                    Location lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                    centerMapOnLocation(lastKnownLocation,"Your Location");
                }
            }



        }
        else{

            Location placelocation = new Location(LocationManager.GPS_PROVIDER);
            placelocation.setLatitude(MemorablePlaces.locations.get(intent.getIntExtra("PlaceNumber",0)).latitude);
            placelocation.setLongitude(MemorablePlaces.locations.get(intent.getIntExtra("PlaceNumber",0)).longitude);

            centerMapOnLocation(placelocation,MemorablePlaces.places.get(intent.getIntExtra("PlaceNumber",0)));
            //mMap.addMarker(new MarkerOptions().position(MainActivity.locations.get(intent.getIntExtra("placeNumber",0))).title(MainActivity.places.get(intent.getIntExtra("placeNumber",0))));
        }
       // Toast.makeText(this, intent.getStringExtra("PlaceNumber"), Toast.LENGTH_SHORT).show();
        // Add a marker in Sydney and move the camera
      /*  LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));*/
    }

    @Override
    public void onMapLongClick(LatLng latLng) {
        Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault());
        String address="";
        try {
            List<Address> listAddress =geocoder.getFromLocation(latLng.latitude,latLng.longitude,1);
            if(listAddress!=null && listAddress.size()>0){
                if(listAddress.get(0).getThoroughfare()!=null){
                    Log.i("Address",listAddress.get(0).toString());
                    address += listAddress.get(0).getThoroughfare();
                    // address = "";
                    Log.i("SubThrough", listAddress.get(0).getThoroughfare());
                }
                if(listAddress.get(0).getSubThoroughfare()!=null){
                    address +=listAddress.get(0).getSubThoroughfare();
                }
                // address +=listAddress.get(0).getThoroughfare();
                // Log.i("Through",address);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
        if(address==""){
            SimpleDateFormat sdf = new SimpleDateFormat("HH:mm yyyy-MM-dd");
            address = sdf.format(new Date());

        }
       /* if(address=="Unnamed Road"){
            SimpleDateFormat sdf = new SimpleDateFormat("HH:mm yyyy-MM-dd");
            address = sdf.format(new Date());
        }*/


        mMap.addMarker(new MarkerOptions().position(latLng).title(address));


        MemorablePlaces.places.add(address);
        MemorablePlaces.locations.add(latLng);
        MemorablePlaces.arrayAdapter.notifyDataSetChanged();

         SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("com.obhan.memorableplaces", Context.MODE_PRIVATE);
        try {
            ArrayList<String> latitudes = new ArrayList<>();
            ArrayList<String > longitudes = new ArrayList<>();
            for(LatLng coordinates: MemorablePlaces.locations){
                latitudes.add(Double.toString(coordinates.latitude));
                longitudes.add(Double.toString(coordinates.longitude));
            }
            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putString("places",ObjectSerializer.serialize(MemorablePlaces.places)).apply();
            editor.putString("latitudes",ObjectSerializer.serialize(latitudes)).apply();
            editor.putString("longitudes",ObjectSerializer.serialize      (longitudes)).apply();
            editor.commit();

        } catch (IOException e) {
            e.printStackTrace();
        }

        Toast.makeText(this, "Location saved", Toast.LENGTH_SHORT).show();
        ///address="";
    }
}
package com.obhan.weather;
公共类MapsActivity扩展了FragmentActivity在MapReadyCallback、GoogleMap.OnMapLongClickListener上的实现{
私有谷歌地图;
地点经理地点经理;
LocationListener LocationListener;
public void centerMapOnLocation(位置、字符串标题){
LatLng userLocation=新LatLng(location.getLatitude(),location.getLongitude());
//mMap.clear();
如果(标题!=“您的位置”){
mMap.addMarker(新的MarkerOptions().position(userLocation).title(title));
}
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(userLocation,10));
}
@凌驾
public void onRequestPermissionsResult(int-requestCode,@NonNull-String[]permissions,@NonNull-int[]grantResults){
super.onRequestPermissionsResult(请求代码、权限、授权结果);
if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION\u已授予){
if(ContextCompat.checkSelfPermission(此,Manifest.permission.ACCESS\u FINE\u位置)==PackageManager.permission\u已授予){
locationManager.RequestLocationUpdate(locationManager.GPS_提供程序,0,0,locationListener);
Location lastKnownLocation=locationManager.getLastKnownLocation(locationManager.GPS\U提供程序);
centerMapOnLocation(lastKnownLocation,“您的位置”);
}
}
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_映射);
//获取SupportMapFragment,并在地图准备好使用时收到通知。
SupportMapFragment mapFragment=(SupportMapFragment)getSupportFragmentManager()
.findFragmentById(R.id.map);
getMapAsync(这个);
}
@凌驾
4月1日公开作废(谷歌地图谷歌地图){
mMap=谷歌地图;
mMap.clear();
mMap.setOnMapLongClickListener((GoogleMap.OnMapLongClickListener)this);
Intent=getIntent();
if(intent.getIntExtra(“PlaceNumber”,0)==0){
//放大到用户位置
locationManager=(locationManager)this.getSystemService(Context.LOCATION\u服务);
locationListener=新locationListener(){
@凌驾
已更改位置上的公共无效(位置){
centerMapOnLocation(位置,“您的位置”);
}
@凌驾
public void onStatusChanged(字符串提供程序、int状态、Bundle extra){
}
@凌驾
公共无效onProviderEnabled(字符串提供程序){
}
@凌驾
公共无效onProviderDisabled(字符串提供程序){
}
};
如果(Build.VERSION.SDK_INT<23){
if(ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u已授予和&ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS\u LOCATION)!=PackageManager.permission\u已授予){
考虑到呼叫
//ActivityCompat#请求权限
//在此处请求缺少的权限,然后覆盖
//public void onRequestPermissionsResult(int-requestCode,字符串[]权限,
//int[]格兰特结果)
//处理用户授予权限的情况。请参阅文档
//对于ActivityCompat,请请求权限以获取更多详细信息。
返回;
}
locationManager.RequestLocationUpdate(locationManager.GPS\提供程序,0,0,locationListener);
}否则
{
if(ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u已授予){
ActivityCompat.requestPermissions(这个新字符串[]{Manifest.permission.ACCESS\u FINE\u LOCATION},1);
}否则{
locationManager.RequestLocationUpdate(locationManager.GPS_提供程序,0,0,locationListener);
Location lastKnownLocation=locationManager.getLastKnownLocation(locationManager.GPS\U提供程序);
centerMapOnLocation(lastKnownLocation,“您的位置”);
}
}
}
否则{
位置位置=新位置(LocationManager.GPS\U提供程序);
setLatitude(MemorablePlaces.locations.get(intent.getIntExtra(“PlaceNumber”,0)).latitude);
setLongitude(MemorablePlaces.locations.get(intent.getIntExtra(“PlaceNumber”,0)).longitude);
centerMapOnLocation(placelocation,MemorablePlaces.places.get(intent.getIntExtra(“PlaceNumber”,0));
//mMap.addMarker(新的MarkerOptions().position(MainActivity.locations.get(intent.getIntExtra(“placeNumber”,0)))).title(MainActivity.places.get(intent.getIntExtra(“placeNumber,0)));
}
//Toast.makeText(this,intent.getStringExtra(“PlaceNumber”),Toast.LENGTH_SHORT.show();
//在Sydney添加一个标记并移动相机
/*悉尼LatLng=新LatLng(-34151);
mMap.addMarker(新MarkerOptions().position(sydney.title)(“悉尼的标记”);
mMap.moveCamera(CameraUpdateFactory.newLatLng(悉尼))*/
}
@凌驾
在MaplongClick(LatLng LatLng)上的公共无效{
Geocoder Geocoder=新的Geocoder(getApplicationContext(),Locale.getDef
   SharedPreferences.Editor editor = sharedPreferences.edit();
                editor.putString("places",ObjectSerializer.serialize(MemorablePlaces.places));
                editor.putString("latitudes",ObjectSerializer.serialize(latitudes));
editor.putString("longitudes",ObjectSerializer.serialize(longitudes));

    editor.commit(); // or editor.apply()