我从两天开始尝试但没有成功。我正在片段的onStop方法中将arraylist保存在内部存储中,然后在onresume方法中从内部存储中获取此数据。我正在检查字符串是否存在于interanlly存储的arraylist中以防止在内部存储中存储重复的字符串,但这似乎不起作用。它每次都在内部存储中存储重复的字符串。我不明白我在这里做错了什么。我将非常感谢你的帮助。
public void saveTitleList (){
try {
FileOutputStream fileOutputStream= mContext.openFileOutput("radiotitle2.txt",MODE_PRIVATE);
DataOutputStream dataOutputStream=new DataOutputStream(fileOutputStream);
dataOutputStream.writeInt(stationName2.size());
ArrayList<String> titletest=getTitleList();
for(String line:stationName2){
if(!titletest.contains(line)){//here i am checking for duplicate strings in intenal file
dataOutputStream.writeUTF(line);
Log.d("title2 saved",line);
}
}
dataOutputStream.flush();
dataOutputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public ArrayList<String> getTitleList(){
ArrayList<String> titleList= new ArrayList<>();
try {
FileInputStream fileInputStream= mContext.openFileInput("radiotitle2.txt");
DataInputStream dataInputStream= new DataInputStream(fileInputStream);
int size=dataInputStream.readInt();
for(int i =0;i<size;i++){
String line=dataInputStream.readUTF();
titleList.add(line);
Log.d("title2 from storage",line);
}
dataInputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return titleList;
}
答案 0 :(得分:2)
ArrayList
允许重复,而 HashSet
不允许重复 。
您应该使用 HashSet 。
Set界面的重要特征是它不允许 重复的元素;存储独特的元素。
HashSet <String> titleList= new HashSet <String>();
try {
FileInputStream fileInputStream= mContext.openFileInput("radiotitle2.txt");
DataInputStream dataInputStream= new DataInputStream(fileInputStream);
int size=dataInputStream.readInt();
for(int i =0;i<size;i++){
String line=dataInputStream.readUTF();
titleList.add(line);
Log.d("title2 from storage",line);
}
......
答案 1 :(得分:0)
您刚刚开始在saveTitleList中写入文件,然后直接从调用getTitleList的同一文件中读取。
该文件为空,然后为一个int执行。
所以你搞得一团糟。
你的代码中会有什么样的逻辑?
答案 2 :(得分:0)
首先,要检查重复项目,您应该使用Set / HashSet。 Arraylist contains方法将搜索O(n)中的每个String,以检查它是否存在。
你应该这样做的方法是定义一个hashSet,并开始向它添加字符串。务必检查字符串是否确实存在。如果它存在则不添加,否则将其添加到hashset。
此外,如果您想保存此数据,以便在您的活动/片段死亡时它可能会持续存在,请将其保存在onSaveInstance方法中。