无法修复Java空指针错误

我有一些代码,当我运行它时返回一个空指针错误。 这是logcat的代码和错误:

import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.content.res.Resources; import android.view.View; import android.widget.TextView; import android.widget.Button; import java.lang.String; import java.util.Random; public class MainActivity extends AppCompatActivity { private static final Random r_generator = new Random(); String textViewString; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Resources res = getResources(); String[] myString = res.getStringArray(R.array.colorArray); String q = myString[r_generator.nextInt(myString.length)]; TextView tv = (TextView) findViewById(R.id.color_text); tv.setText(q); Button green= (Button) findViewById(R.id.green_button); green.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!textViewString.equals("Green")) return; Resources res = getResources(); String[] myString = res.getStringArray(R.array.colorArray); String q = myString[r_generator.nextInt(myString.length)]; TextView tv = (TextView) findViewById(R.id.color_text); tv.setText(q); } }); Button blue = (Button) findViewById(R.id.blue_button); blue.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!textViewString.equals("Blue")) return; Resources res = getResources(); String[] myString = res.getStringArray(R.array.colorArray); String q = myString[r_generator.nextInt(myString.length)]; TextView tv = (TextView) findViewById(R.id.color_text); tv.setText(q); } }); Button red = (Button) findViewById(R.id.red_button); red.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!textViewString.equals("Red")) return; Resources res = getResources(); String[] myString = res.getStringArray(R.array.colorArray); String q = myString[r_generator.nextInt(myString.length)]; TextView tv = (TextView) findViewById(R.id.color_text); tv.setText(q); } }); } } 

我曾尝试查看其他非法状态错误问题,但我仍然对我的个案出错了。

这是错误代码:

  E/AndroidRuntime: FATAL EXCEPTION: main java.lang.NullPointerException at com.example.cedric.learnthecolors.MainActivity$1.onClick(MainActivity.java:31) at android.view.View.performClick(View.java:4476) at android.view.View$PerformClick.run(View.java:18795) at android.os.Handler.handleCallback(Handler.java:730) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:177) at android.app.ActivityThread.main(ActivityThread.java:5496) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1225) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1041) at dalvik.system.NativeStart.main(Native Method) 

这是我的布局文件:

      

非常感谢!!!

问题是这一行:

 !textViewString.equals() 

因为在使用之前没有给textViewString赋值。 至少将它分配给一个空字符串,或者只是删除那一行,因为在它没有做得好的那一刻,我真的不明白这一点。 由于你无法改变它的价值,你的按钮都不会起作用(即使没有例外)。

您没有为红色按钮设置onClickListener,而是将侦听器重新分配给蓝色按钮。

 Button red = (Button) findViewById(R.id.red_button); blue.setOnClickListener(new View.OnClickListener() { 

您是否还在xml布局文件中定义了onClick属性? 如果是这样,那么您需要确保您有一个与您指定的名称匹配的方法。 例如,如果您已输入

 onClick="buttonClicked" 

您需要定义一个名为的方法

 public void buttonClicked() { /* OnClick functionality here */ } 

有关您的第二个问题,请参阅@vucko的@ https://stackoverflow.com/a/38547338/1540698

尝试更改主题并检查它是否有效。

  android:theme="@android:style/Theme.Holo.Light" 

在你的布局中,你说:

 android:onClick="onClick" 

看来您没有包含Activity的所有代码,但我敢打赌它没有定义名为onClick的方法

您需要做的就是定义方法。