因为我的日志命令踢出一个“4”,我猜它是:
word.getnewword();
返回空指针异常,但为什么?
代码的目的是让一个类在一个单词中包含不同的字母,然后单独为单词中的每个字母设置动画,然后将该单词更改为类中列表中的随机新单词。我为每个字母使用字符而不是单词或每个字母的字符串,那也可以吗?
package com.xyz.letters;
import ......abreviated
public class letters extends Activity {
private Animals word;
boolean gameover = false;
private AdView adView;
TextView tva;
TextView tvb;
TextView tvc;
TextView tvd;
TextView tve;
TextView tvf;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.letters);
Log.e("main", "xml loaded fine");
tva = (TextView) findViewById(R.id.texta);
tvb = (TextView) findViewById(R.id.textb);
tvc = (TextView) findViewById(R.id.textc);
tvd = (TextView) findViewById(R.id.textd);
tve = (TextView) findViewById(R.id.texte);
tvf = (TextView) findViewById(R.id.textf);
Log.e("main", "textview pre-setup complete");
Log.e("main", "4");
word.getnewword();
Log.e("main", "gotword " + word.getwordchosennumber());
setletters();
Log.e("main", "set letters ok");
......etc
我的班级: -
package com.xyz.letters;
import java.util.Random;
import android.util.Log;
public class Animals {
private int wordchosen;
private int length;
private char l1;
private char l2;
private char l3;
private char l4;
private char l5;
private char l6;
public Animals() {
this.wordchosen = 0;
this.length = 3;
this.l1 = 'a';
this.l2 = 'b';
this.l3 = 'c';
this.l4 = 'a';
this.l5 = 'b';
this.l6 = 'c';
}
public void getnewword() {
Log.e("animals", "0");
Random ran = new Random();
Log.e("animals", "1");
wordchosen = ran.nextInt(2);
Log.e("animals", "2");
switch (wordchosen) {
case 0:
length = 3;
l1 = 'a';
l2 = 'n';
l3 = 't';
break;
case 1:
length = 4;
l1 = 'b';
l2 = 'a';
l3 = 'l';
l4 = 'l';
break;
case 2:
length = 3;
l1 = 'b';
l2 = 'a';
l3 = 't';
break;
default:
length = 0;
break;
}
}
public int getwordchosennumber()
{
return this.wordchosen;
}
public int getlength()
{
return this.length;
}
public int getl1()
{
return this.l1;
}
public int getl2()
{
return this.l2;
}
public int getl3()
{
return this.l3;
}
public int getl4()
{
return this.l4;
}
public int getl5()
{
return this.l5;
}
public int getl6()
{
return this.l6;
}
}
答案 0 :(得分:2)
因为,word
的值为null
。异常null pointer exception
本身指定了它的含义,即您想要访问某个具有null
引用的对象。
在此声明
private Animals word;
最初,它有null
引用,直到您不会执行
word = new Animals(); // assign Animals reference
答案 1 :(得分:0)
您永远不会初始化word
。在错误之前的行(或初始声明中),使用new
:
word = new Animals(); // The line to insert.
word.getnewword();
在未来的问题上,当您收到异常或强制关闭时,请发布完整的LogCat堆栈跟踪(日志输出中的红色文本),以帮助我们更快地找到问题。
答案 2 :(得分:0)
在OnCreate之后 Log.e(“main”,“textview预设完成”);
添加
word = new Animals();
答案 3 :(得分:0)
您应该创建类的对象,如
word = new Animals();
现在,使用此对象访问Animals类的公共方法和变量。
word.getnewword();
答案 4 :(得分:0)
您收到NullPointerException,因为未初始化变量“word”。在使用变量时,Android有点奇怪。如果在调用变量之前没有在onCreate方法(或从onCreate方法调用的某个方法)中初始化变量,那么您将得到NullPointerException,因为JVM不知道该变量的值是什么。它有点像常规的java代码,它有一个main方法 - 如果你调用一个尚未在main方法中被初始化的变量,你将得到一个NullPointerException。
要修改代码,只需在调用变量之前将其放在onCreateMethod中:
word = new Animals();
之后,您可以使用变量完成所需的操作。