无法修复Java空指针错误

时间:2016-07-23 22:49:28

标签: java android

我有一些代码,当我运行它时返回一个空指针错误。这是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>

非常感谢!!!

4 个答案:

答案 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的方法

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