2017-04-26 79 views
1

我一直在試圖弄清楚一兩個星期,不能做到這一點。爲應用程序存儲HashMaps [CodeName One]

我有兩個類,MyApplicationStore。這只是一個測試程序,看看我的存儲代碼有什麼問題。

這是MyApplication

public class MyApplication { 
private Form current; 
private Resources theme; 
private Store o; 

public void init(Object context) { 
    theme = UIManager.initFirstTheme("/theme"); 
    Util.register("Store", Store.class); 
    Toolbar.setGlobalToolbar(true); 
} 

public void start() { 
    if(current != null){ 
     current.show(); 
     return; 
    } 

     Form hi = new Form("Hi World"); 

     TextField enter = new TextField("","Enter Here", 20, TextField.ANY); 
     Button add = new Button("Add"); 

     add.addActionListener((ev)-> 
       o.add(enter.getText() + "", 100)); /*Failing here*/ 

     hi.add(enter).add(add); 

     hi.show(); 

} 

private void save() 
{ 
    Storage.getInstance().writeObject("NameOfFile", o); 
} 

private void load() 
{ 
    o = (Store) Storage.getInstance().readObject("NameOfFile"); 
} 

public void stop() { 
    current = Display.getInstance().getCurrent(); 
    if(current instanceof Dialog) { 
     ((Dialog)current).dispose(); 
     current = Display.getInstance().getCurrent(); 
    } 
} 
public void destroy() { 
} 

} 

這是Store

public class Store implements Externalizable {  
private static final int VERSION = 1; 
HashMap<String, Integer> data; 

public void externalize(DataOutputStream out) throws IOException 
{ 
    Util.writeObject(data, out); 
} 
public void internalize(int version, DataInputStream in) throws IOException 
{ 
    data = (HashMap<String, Integer>)Util.readObject(in); 
} 
public void add(String s, Integer i) 
{ 
    data.put(s, i); 
} 
public int getVersion() 
{ 
    return VERSION; 
} 
public String getObjectId() 
{ 
    return "Store"; 
} 
} 

我以前用過一個哈希表的指針在MyApplication類,但它無法在同一位置。

回答

1

您發佈的代碼似乎沒有初始化任何地方的data HashMap。你不打電話給你的方法,你實際上並沒有在任何地方創建Hashmap。因此,您突出顯示的行可能會因NPE而失敗。

未來,您應該包括更多的信息,而不僅僅是「失敗在這裏」。如果有堆棧跟蹤,請始終提供。如果沒有堆棧跟蹤,那麼你需要描述你如何知道它在那裏失敗。