Java 如何在共享首选项中指定唯一的字符串值

Java 如何在共享首选项中指定唯一的字符串值,java,android,sharedpreferences,Java,Android,Sharedpreferences,我使用共享首选项在我的应用程序中存储来电者详细信息,如下所示。 无论何时有来电,我都会保存来电者的以下详细信息 sharedPrefCallLog = getSharedPreferences("CallLogPref", Context.MODE_PRIVATE); editorCallLogPref = sharedPrefCallLog.edit(); editorCallLogPref.putString("name", Name); editorCallLog

我使用共享首选项在我的应用程序中存储来电者详细信息,如下所示。 无论何时有来电,我都会保存来电者的以下详细信息

 sharedPrefCallLog = getSharedPreferences("CallLogPref", Context.MODE_PRIVATE);
    editorCallLogPref = sharedPrefCallLog.edit();
    editorCallLogPref.putString("name", Name);
    editorCallLogPref.putString("num", Number);
    editorCallLogPref.putString("city",City); 
    editorCallLogPref.apply();
第一次通话一切正常。当收到第二个呼叫时,第一个呼叫的详细信息将被清除并替换为第二个呼叫。我怎样才能拯救一切?我想保存最近10次通话的详细信息

我应该使用除SharedRef之外的其他方法吗


任何建议都会很有帮助,谢谢:

如果您需要保存多达10条通话记录,只需保存一个小数据集,那么共享首选项就可以了

您需要为记录分配唯一的密钥

private void saveCallLog(final int callRecordID){
    // key here is callRecordID
    sharedPrefCallLog = getSharedPreferences("CallLogPref", Context.MODE_PRIVATE);
    editorCallLogPref = sharedPrefCallLog.edit();
    editorCallLogPref.putString("name_"+ callRecordID, Name);
    editorCallLogPref.putString("num_"+ callRecordID, Number);
    editorCallLogPref.putString("city_"+ callRecordID,City);
    editorCallLogPref.apply();
}
要获取呼叫日志详细信息,请使用

private void getCallDetails(int callRecordID){
    sharedPrefCallLog.getString("name_"+ callRecordID, null);
    sharedPrefCallLog.getString("num_"+ callRecordID, null);
    sharedPrefCallLog.getString("city_"+ callRecordID, null);

}

对我来说,共享首选项并不好,你必须使用数据库persistence作为房间或领域,例如,我只需要保存10个呼叫详细信息。我真的需要数据库吗?