我有一些代码,当我运行它时返回一个空指针错误。这是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)
这是我的布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:theme="@android:style/Theme.Holo.Light"
tools:context="com.example.cedric.learnthecolors.MainActivity"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/color_text"
android:text="@string/Green"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="68sp"
android:gravity="center"
android:textAllCaps="true"/>
</LinearLayout>
<LinearLayout android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<Button
android:id="@+id/green_button"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="onClick"
android:background="@drawable/green_button"/>
<Button
android:id="@+id/blue_button"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="onClick"
android:background="@drawable/blue_button"/>
<Button
android:id="@+id/red_button"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="onClick"
android:background="@drawable/the_red_button"/>
</LinearLayout>
<LinearLayout android:id="@+id/linearLayout2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<Button
android:id="@+id/yellow_button"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="onClick"
android:background="@drawable/yellow_button"/>
<Button
android:id="@+id/white_button"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="onClick"
android:background="@drawable/white_button"/>
<Button
android:id="@+id/orange_button"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="onClick"
android:background="@drawable/orange_button"/>
</LinearLayout>
<LinearLayout android:id="@+id/linearLayout3"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<Button
android:id="@+id/brown_button"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="onClick"
android:background="@drawable/brown_button"/>
<Button
android:id="@+id/pink_button"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="onClick"
android:background="@drawable/pink_button"/>
<Button
android:id="@+id/purple_button"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="onClick"
android:background="@drawable/purple_button"/>
</LinearLayout>
</LinearLayout>
非常感谢!!!
答案 0 :(得分:2)
问题在于这一行:
!textViewString.equals()
因为在使用它之前,您没有在任何地方给出textViewString
的值。至少将它分配给一个空字符串,或者只是删除那一行,因为在它没有做得好的那一刻,我真的不明白这一点。由于你无法改变它的价值,你的按钮都不会起作用(即使没有例外)。
答案 1 :(得分:1)
您没有为红色按钮设置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以了解您的第二期。
答案 2 :(得分:0)
尝试更改主题并检查其是否有效。
android:theme="@android:style/Theme.Holo.Light"
答案 3 :(得分:0)
在你的布局中,你说:
android:onClick="onClick"
您似乎没有包含活动的所有代码,但我敢打赌它没有定义名为onClick
的方法
您需要做的就是定义方法。