为应用程序存储HashMaps [CodeName One]

时间:2017-04-26 20:38:10

标签: java hashmap store codenameone

我一直在努力解决这个问题一两个星期,但却做不到。

我有两个班级,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 个答案:

答案 0 :(得分:1)

您发布的代码似乎无法在任何地方初始化data HashMap。您没有调用load()方法,实际上并没有在任何地方创建Hashmap。因此,您突出显示的行可能会因NPE而失败。

将来,您应该提供更多信息,而不仅仅是“失败”。如果有堆栈跟踪,请始终提供。如果没有堆栈跟踪,那么您需要描述如何知道它在那里失败。