首先是构造函数或onDraw()

时间:2014-08-02 16:38:47

标签: java android ondraw

我提到this question,但它没有提供我所要求的内容。

我有一些全局声明的变量,最初它们被赋值为NULL。在构造函数内部,我调用一个名为"newGame()"的函数,该函数初始化变量。在onDraw()里面我试图绘制一个文本,其中包含我在newGame()函数中初始化的变量之一的大小,当我运行应用程序时,它崩溃了,{{1} }说:logCat

所以,我认为,如果首先调用构造函数,我的变量应该已经初始化,因此不应该有NPE。但是,因为有NPE,似乎在构造函数之前调用NPE,是真的吗?

Update_1

我还在onDraw()内放置了newGame()功能,但我收到了相同的onSizeChanged()

Update_2

我正在检查NPE的对象是否为null,如下所示: hashmap检查对象是否为空是正确的吗?

Update_3

这是我如何初始化“手”

if (obj == null)

代码

if (hand == null) {
        Log.i(TAG, "@dealCards: Hand hashMap was NULL, it will be initialised");
        hand = new HashMap<Integer, Card>();
    }

2 个答案:

答案 0 :(得分:1)

<强>更新

看到你添加的代码,你在哪里初始化tableHand?

顺便说一句,最好将tableHand声明为Map而不是HashMap,并使用新的HashMap&lt;&gt;()初始化它。


毫无疑问,构造函数。如果该对象不存在,则不能在其上调用实例方法。

答案 1 :(得分:0)

为什么不尝试按照此设计确保正确启动变量

class Foo {
    private static String GLOBAL_VAR = null ;
    private        String instanceVariable = null ;

    static {
        // here you can do complicated stuff 
        //in order to correctly initiate your variables.
        GLOBAL_VAR = "FOO" ; 
    }// this block will run when the class is loaded

    {
        // here you can do complicated stuff 
        //in order to correctly initiate your variables.
        instanceVariable = "foo" ;  
    }// this block will run before constructor.

    Foo()
    {

    }//Constructor

    static String getGlobalVar()
    {
         return GLOBAL_VAL ;
    }
}