无法修复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
的方法
您需要做的就是定义方法。
- 在onClick事件后创建一个Dialog
- 如何使用注释在改进2中解析android中的动态json
- 是什么导致Android Dalvik java.lang.VerifyError“数组索引的无效的reg类型”?
- 无法播放此video错误
- 虽然在项目中添加了特定的jar但没有找到类(没有webservice的android到sqlserver)
- 尝试使用此代码将char数组转换为Java中的整数数组
- 如何从Java中的’double’类型的值中删除十进制值
- java.lang.UnsatisfiedLinkError:无法加载eposprint:findLibrary返回null
- 使用.next()或.nextLine()的java字符串变量