2015-01-20 9 views
3

Я искал везде, и я пробовал разные решения, но результат пуст/пуст/{}. Можно ли сохранить LinkedHashMap, чтобы его можно было найти позже?Как сохранить LinkedHashMap <Integer, Integer>?

//Save HashMap to Internal Storage 
public void SaveHashMapToInternalStorage(String SavedData, LinkedHashMap<Integer, Integer> linkedHashMapList) 
                   throws FileNotFoundException, IOException {  
    try{ 
     File fileOne = new File(SavedData); 
     FileOutputStream fileOutputStream = new FileOutputStream(fileOne); 
     ObjectOutputStream oos = new ObjectOutputStream(fileOutputStream); 

      oos.writeObject(linkedHashMapList); 
      oos.flush(); 
      oos.close(); 
      fileOutputStream.close(); 
     }catch(Exception e){} 
} 

//Load HashMap from Internal Storage 
public LinkedHashMap<Integer, Integer> LoadHashMapFromInternalStorage(String SavedData) throws IOException { 
    LinkedHashMap<Integer, Integer> linkedHashMapList = new LinkedHashMap<Integer, Integer>(); 
    try{ 
     File toRead = new File(SavedData); 
     FileInputStream fileInputStream = new FileInputStream(toRead); 
     ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); 
     linkedHashMapList = (LinkedHashMap<Integer, Integer>)objectInputStream.readObject(); 
     objectInputStream.close(); 
     fileInputStream.close(); 
     for(Entry<Integer, Integer> m :linkedHashMapList.entrySet()){ 
      linkedHashMapList.put(m.getKey(), m.getValue()); 
     } 

    }catch(Exception e){} 
    return linkedHashMapList; 
} 

Может кто-нибудь, пожалуйста, помогите мне?

Большое спасибо

Update:

Я поместил Тост в улове (Exception е), что он есть. В методе есть что-то не так.

Я пытался загрузить это в методе OnCreate:

FirstRunMethod = SharedPrefs.getBoolean("FIRST_RUN", false); 
    if (!FirstRunMethod) { 
    // do the thing for the first time 
     prefs_editor.putBoolean("FIRST_RUN", true); 
     prefs_editor.apply();      
     ....... 
     ....... 

     try { 
       SaveHashMapToInternalStorage("file.txt", PicResolution); 

      } catch (FileNotFoundException e) {); 
      } catch (IOException e) { }    
    } 

    PictureResWidthHashMap = LoadHashMapFromInternalStorage("file.txt"); 

    .... 

    ..... 


public LinkedHashMap<Integer, Integer> LoadHashMapFromInternalStorage(String SavedData) { 
    LinkedHashMap<Integer, Integer> linkedHashMapLIST = new LinkedHashMap<Integer, Integer>(); 

     try{ 
      File toRead = new File(SavedData); 
      FileInputStream fileInputStream = new FileInputStream(toRead); 
      ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); 
      linkedHashMapLIST = (LinkedHashMap<Integer, Integer>)objectInputStream.readObject(); 
      objectInputStream.close(); 
      fileInputStream.close(); 
      for(Entry<Integer, Integer> m :linkedHashMapLIST.entrySet()){ 
       linkedHashMapLIST.put(m.getKey(), m.getValue()); 
      } 

     }catch(Exception e){Toast.makeText(getBaseContext(), "CANT LOAD ERROR", Toast.LENGTH_LONG).show(); } 

     return linkedHashMapLIST; 
} 

Почему он работал на другого человека, но он не работает для меня? Для меня это вообще не имеет смысла.

+0

Где именно вы получите NullPointerException? – Thilo

+0

Я пытаюсь загрузить этот LinkedHashMapList = LoadHashMapFromInternalStorage (LINKHasMapString); Результатом является {}, который вызывает nullpointerexcepter другим моим методам. Спасибо –

+0

Вы уверены, что в файле нет пустой карты? А что такое цикл в методе Load, который должен делать? – Thilo

ответ

2

Я думаю, что это поможет вам решить вашу проблему:

Попробуйте это:

//Save HashMap to Internal Storage 
public void SaveHashMapToInternalStorage(String SavedData, LinkedHashMap<Integer, Integer> linkedHashMapList) { 
    try{ 
     FileOutputStream fos = this.openFileOutput(SavedData, Context.MODE_PRIVATE); 
     ObjectOutputStream s = new ObjectOutputStream(fos); 
     s.writeObject(linkedHashMapList); 
     s.close(); 

    }catch(Exception e){ }  
} 

//Load HashMap from Internal Storage @SuppressWarnings("unchecked") 
public LinkedHashMap<Integer, Integer> LoadHashMapFromInternalStorage(String SavedData) { 
    LinkedHashMap<Integer, Integer> linkedHashMapLIST = new LinkedHashMap<Integer, Integer>(); 
     try{ 
      FileInputStream fileInputStream = this.openFileInput(SavedData); 
      ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); 
      linkedHashMapLIST = (LinkedHashMap<Integer, Integer>) objectInputStream.readObject(); 
      objectInputStream.close(); 
      fileInputStream.close(); 

     }catch(Exception e){ }   
     return linkedHashMapLIST; 
} 
1

Возможно, вы допустили некоторые ошибки при инициализации. Я запустил этот код и получил желаемый результат.

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.util.LinkedHashMap; 
import java.util.Map.Entry; 


public class LinkedHashMapExample { 

    public LinkedHashMapExample() { 
     // TODO Auto-generated constructor stub 
    } 

    public void SaveHashMapToInternalStorage(String SavedData, LinkedHashMap<Integer, Integer> linkedHashMapList) 
      throws FileNotFoundException, IOException {  
     try{ 
      File fileOne = new File(SavedData); 
      FileOutputStream fileOutputStream = new FileOutputStream(fileOne); 
      ObjectOutputStream oos = new ObjectOutputStream(fileOutputStream); 

      oos.writeObject(linkedHashMapList); 
      oos.flush(); 
      oos.close(); 
      fileOutputStream.close(); 
     }catch(Exception e){} 
    } 

    //Load HashMap from Internal Storage 
    public LinkedHashMap<Integer, Integer> LoadHashMapFromInternalStorage(String SavedData) throws IOException { 
     LinkedHashMap<Integer, Integer> linkedHashMapList = new LinkedHashMap<Integer, Integer>(); 
     try{ 
      File toRead = new File(SavedData); 
      FileInputStream fileInputStream = new FileInputStream(toRead); 
      ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); 
      linkedHashMapList = (LinkedHashMap<Integer, Integer>)objectInputStream.readObject(); 
      objectInputStream.close(); 
      fileInputStream.close(); 
      for(Entry<Integer, Integer> m :linkedHashMapList.entrySet()){ 
       linkedHashMapList.put(m.getKey(), m.getValue()); 
      } 

     }catch(Exception e){} 
     return linkedHashMapList; 
    } 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) throws FileNotFoundException, IOException 
    { 
     // TODO Auto-generated method stub 

     LinkedHashMap<Integer, Integer> linkedHashMap = new LinkedHashMap<Integer,Integer>(); 

     linkedHashMap.put(0, 0); 
     linkedHashMap.put(1, 1); 
     linkedHashMap.put(2, 4); 

     LinkedHashMapExample linkedHashMapExample = new LinkedHashMapExample(); 

     linkedHashMapExample.SaveHashMapToInternalStorage("file.txt", linkedHashMap); 

     LinkedHashMap<Integer, Integer> linkedHashMapOutput = linkedHashMapExample.LoadHashMapFromInternalStorage("file.txt"); 

     for(int i=0; i <linkedHashMapOutput.size(); i++) 
     { 
      System.out.println(linkedHashMapOutput.get(i)); 
     } 
    } 

} 

В выходе я получил:

Надеется, что вы можете узнать вашу проблему из этого примера.

+0

Большое спасибо за ответ, но я теряю нагрузку. См. Мой обновленный вопрос. благодаря –