2017-03-24 33 views
0

我想從兩天開始,但沒有取得成功。我在我的片段的onStop方法中將arraylist保存在內部存儲中,然後從onresume方法的內部存儲中獲取此數據。我正在檢查要存儲在interanlly存儲的數組列表中的字符串,以防止在內部存儲中存儲重複的字符串,但這似乎不起作用。它每次都在內部存儲器中存儲重複字符串。我不明白我在這裏做錯了什麼。我會非常感謝你的幫助。如何防止在內部存儲器中存儲重複的字符串

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

使用一個將防止重複的集合 – 7663233

+0

感謝您的回答:) – LanguageMaster

回答

1

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

謝謝我會親自嘗試它)))))))))) – LanguageMaster

+0

@LanguageMaster確實。 –

0

你剛開始寫在saveTitleList一個文件,然後直接從同一個文件調用getTitleList讀取。

該文件是空的,然後豁免一個int。

所以你搞砸了。

你的代碼中有什麼樣的邏輯?

+0

我真的搞砸了。我唯一試圖做的是在寫入之前閱讀內部存儲文件以檢查重複的字符串 – LanguageMaster

0

首先爲了檢查重複項目,你應該使用Set/HashSet。 Arraylist包含方法將搜索O(n)中的每個字符串,以檢查其是否存在。

你應該這樣做的方式是定義一個hashSet,並開始向它添加字符串。一定要檢查字符串是否實際存在。如果存在,請不要添加,否則將其添加到哈希集。

此外,如果您想要保存此數據,以便在您的活動/片段死亡時它可以保留,然後將其保存在onSaveInstance方法中。

相關問題