有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android应用程序崩溃NullPointerException

我已经做了搜索,似乎是一个个案的基础上,什么原因造成这一点。不过,真正理解这一点的人很可能会不同意

我的按钮从主屏幕进入其他活动,效果很好,与不起作用的按钮的唯一区别是,它实际上是从另一个类/变量中提取一个类/变量。java文件,所以我确信我没有正确地实现它

这是一个单身班:

全球。爪哇

//Constructor 
//
protected Global() {
    getInstance();
}


//Singleton Method
//
public static Global getInstance() {
    if(instance == null) {
        initialize();
        instance = new Global();
    }
    return instance;
}

我有几个(静态)类结构(我使用术语结构,因为我主要是C++程序,而我是,它们是什么),它们放在全局文件/类中,以及这个数组,它保存程序的所有数据{{CD1>}/P>

getInstance()(Singleton方法)调用的initialize();函数只是将数据填充到questionStruct[]数组中

我有一个返回字符串的方法

public static String getQ(int q){

    return questions[q].q;
}

在公园里。按下按钮调用的java文件,我有placeData();只是为了测试一下,在该函数中:

public void placeData() {

    String testString = ("Testing Text: " + Global.getQ(3));

    TextView Q = (TextView) findViewById(R.id.testingText);
    Q.setText(testString);


}

最后。。。有希望地应该显示在XML文件中的文本视图:

    <TextView
        安卓:id="@+id/testingText"
        安卓:layout_width="fill_parent"
        安卓:layout_height="wrap_content" />

这是我的官方错误,我相信是崩溃的指示器,只有当我按下按钮初始化这个活动时才会发生

java.lang.RuntimeException: Unable to start activity ComponentInfo{godwin.com.study/godwin.com.study.practice}: java.lang.NullPointerException: Attempt to read from field 'java.lang.String godwin.com.study.Global$questionStruct.q' on a null object reference

想法

编辑:

类(类似于C++中的结构)内部的全局。爪哇

class answerStruct
{
    String a;
    boolean status;
}


//Structure for Questions
//
class questionStruct
{
    String q;

    answerStruct[] answer = new answerStruct[TOTAL_ANSWERS];

}

“initialize()”函数:

public static void initialize() {

    questions[0].q = "Question # 1";
    questions[0].answer[0].a = "Q1A1";
    questions[0].answer[0].status = true;
    questions[0].answer[1].a = "Q1A2";
    questions[0].answer[1].status = false;

    ...And so on...Forever
}

共 (1) 个答案

  1. # 1 楼答案

    在Java中分配对象数组时,如下所示:

    static questionStruct[] questions = new questionStruct[TOTAL_QUESTIONS];
    

    您只是分配一个对象引用数组,实际上并没有分配对象本身。这就像是在C++中分配了一组指针,但是它们没有指向任何东西。p>

    在initialize()函数的顶部,您可以分配所有questionStruct对象,以及嵌套for循环中每个对象的答案,如下所示:

    for(int i = 0; i < TOTAL_QUESTIONS; i++)
    {
        questions[i] = new questionStruct();
        for(int j = 0; j < TOTAL_QUESTIONS; j++)
            questions[i].answer[j] = new answerStruct();
    }
    

    然后,您可以像现在这样遍历并初始化结构中的所有字段