java - 使用 SharedPreferences 保存字符串值,但由于某种原因未保存或由于其他问题

标签 java android sharedpreferences

我正在尝试使用 Latlng 保存标记并使用 SharedPreferences 保存两个字符串,并且我正在执行一个 for 循环以在 Activity 再次午餐时检索它,我之前还有另一个问题,因为我不能' t 从 SharedPreferences 中删除标记所以我很想念我现在不知道问题是什么,请检查下面的代码以及任何可以帮助我的建议

我正在使用 et 字符串,因此我将其与标记标题相匹配,在单击标记时,我根据其标题从共享首选项中删除标记,并且已经在 onCreated 方法中初始化了共享首选项,如下所示 SharedPrefs = PreferenceManager .getDefaultSharedPreferences(getApplicationContext());

所以我像这样保存值,

int Int,cycler,IncreaseAmount;
String testSample;
private static final String StringLat= "Latitude",StringLng="Longitude",StringDis="Dis",StringName="Name";

String SinputNames = inputName.getText().toString();
Sinputdiscription = inputdiscription.getText().toString();


dLatitude = AddedLatLng.latitude;
dLongitude = AddedLatLng.longitude;
SharedPreferences.Editor editor = SharedPrefs.edit();

IncreaseAmount++;
editor.putInt("IJSS",IncreaseAmount);
IncreaseAmount = SharedPrefs.getInt("IJSS",0);
//SJSS = SinputNames;
//SJSS = Double.toString(dLatitude);

editor.putString("ErrorTest","Pulling up the info is working");
editor.putLong(SJSS+StringLat,Double.doubleToLongBits(dLatitude));
editor.putLong(SJSS+StringLng,Double.doubleToLongBits(dLongitude));
editor.putString(SJSS+StringName,SinputNames);
editor.putString(SJSS+StringDis,Sinputdiscription);
// editor.putString("lat"+ Integer.toString((IntCoords)), Double.toString(point.latitude));
editor.putString("ForLooper"+Integer.toString((IncreaseAmount)),SinputNames);
editor.apply();

然后将其从sharedPreferences

中取出
String CheckErrortest = SharedPrefs.getString("ErrorTest","Not working!");

Log.i("AlertSinput:",CheckErrortest);
cycler = SharedPrefs.getInt("IJSS",0);
if(cycler !=0) {
    String Name="";
    double Lat321,Lng321;
//     Log.i("ifCycler","if Cycler != 0 is working");
    Int = SharedPrefs.getInt("IJSS",0) +1;
    for(int i=0; i< Int ; i++ ) {
        Log.i("ForLoop:","The for loop is also working");
        // editor.putString("ForLooper"+Integer.toString((IncreaseAmount)),SJSS+StringLat);

        //Here i can't pull up the info
        String iCheck = SharedPrefs.getString("Forlooper"+Integer.toString((Int)),"");
        Log.i("TheMarkerName:","Should be"+iCheck);
        Name = SharedPrefs.getString(iCheck+StringName,"Marker");
        Lat321 = Double.longBitsToDouble(SharedPrefs.getLong(iCheck+StringLat,0));
        Lng321 = Double.longBitsToDouble(SharedPrefs.getLong(iCheck+StringLng,0));
        Log.i("Markertitle:#",Name);
        Log.i("TestTheInteger:#",Integer.toString((Int)));

        if(Lat321 !=0) {
            AddedLatLng = new LatLng(Lat321,Lng321);
            drawMarker(AddedLatLng,Name);
        }
    }
}

因此 CheckErrortestLog.i("ForLoop:","The for 循环也正常工作"); 工作得很好,但是 String String iCheck = SharedPrefs.getString("Forlooper"+Integer.toString((Int)),""); 当我出于某种原因提取信息时无法正常工作,并且我无法弄清楚问题是什么,非常感谢您提供任何帮助,非常感谢

最佳答案

我没看到你是commiting your changes 。你需要做

editor.apply();

editor.commit();

All changes you make in an editor are batched, and not copied back to the original SharedPreferences until you call commit() or apply()

关于java - 使用 SharedPreferences 保存字符串值,但由于某种原因未保存或由于其他问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40630913/

相关文章:

java - 有没有一种方法可以格式化您的输出,使其更加统一?

java - FirebaseInAppMessagingClickListener 不调用 android

java - 如何将数据从返回 Activity 传递到上一个 Activity 中的对话框?

java - 一段时间后通知

android - 如何在android中调用Restful web服务

java - 什么是 '@CalledByNative(".. .")' ?

java - UnsupportedOperationException : Use MenuItemCompat. setOnActionExpandListener()

list - Flutter - 如何将 List<Uint8List> 放入共享首选项?

android - 以数组列表或其他形式将待定 Intent 保存到共享首选项中?

android - 如何从另一个类访问共享首选项 bool 值