繁体   English   中英

无法在Android Studio中运行应用。 空指针异常

[英]Cannot run app in Android Studio. NullPointerException

我正在尝试启动一个简单的应用程序,当您单击按钮(StartButton)时,它将启动Mix()方法,该方法将对从String数组(wordPick)中随机选择的单词进行加扰,并设置文本字段的文本(ScambleF )。 从那里,另一个按钮(EnterButton)从可编辑的文本字段(EnterF)中读取并检查用户在EnterF文本字段中输入的单词是否与未加密的单词匹配。

不幸的是,在模拟器中启动应用程序后,我仍然立即收到以下错误消息。 我在这里搜索了答案,但到目前为止,唯一有用的方法不是在onCreate()之前初始化变量。

编辑:添加了一个天文钟,但现在它没有任何功能。

 FATAL EXCEPTION: main Process: com.example.roland.scramblegame, PID: 19156 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.roland.scramblegame/com.example.roland.scramblegame.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference at android.content.ContextWrapper.getResources(ContextWrapper.java:87) at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:81) at android.support.v7.app.AppCompatActivity.getResources(AppCompatActivity.java:541) at android.content.Context.getString(Context.java:409) at com.example.roland.scramblegame.MainActivity.Fill(MainActivity.java:64) at com.example.roland.scramblegame.MainActivity.onCreate(MainActivity.java:27) at android.app.Activity.performCreate(Activity.java:6237) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

这是我的Java文件

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.util.Random;
public class MainActivity extends AppCompatActivity {

String []wordPick;
int track;
Button StartButton, EnterButton;
TextView ScrambleF;
EditText EnterF;
MainActivity run;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    run = new MainActivity();
    wordPick = new String[16];
    wordPick = run.Fill(wordPick);
    StartButton = (Button)findViewById(R.id.StartB);
    EnterButton = (Button)findViewById(R.id.EnterB);

    StartButton.setOnClickListener(
            new Button.OnClickListener() {
                public void onClick(View v) {
                    Random rand = new Random();
                    track = rand.nextInt(16);
                    ScrambleF = (TextView)findViewById(R.id.Question);
                    ScrambleF.setText( run.Mix(wordPick[track]) );
                }
            }
    );

    EnterButton.setOnClickListener(
            new Button.OnClickListener() {
                public void onClick(View v) {
                    EnterF = (EditText) findViewById(R.id.Answer);
                    if (EnterF.getText().toString().equalsIgnoreCase(wordPick[track])) {
                        //Correct
                    }
                    else {
                        //Incorrect
                    }
                }
            }
    );
}


public String[] Fill (String[] array) {
    //Im just going to add random words
    if (array == null) {
        array = wordPick;
    }
    array[0] = getString(R.string.W_Bottle);
    array[1] = getString(R.string.W_Samurai);
    array[2] = getString(R.string.W_Keyboard);
    array[3] = getString(R.string.W_Shrimp);
    array[4] = getString(R.string.W_Project);
    array[5] = getString(R.string.W_Planet);
    array[6] = getString(R.string.W_Walnut);
    array[7] = getString(R.string.W_PacMan);
    array[8] = getString(R.string.W_Shelter);
    array[9] = getString(R.string.W_Android);
    array[10] = getString(R.string.W_Toilet);
    array[11] = getString(R.string.W_Numbers);
    array[12] = getString(R.string.W_Anime);
    array[13] = getString(R.string.W_Goldfish);
    array[14] = getString(R.string.W_Phantom);
    array[15] = getString(R.string.W_Jigsaw);

    return array;
}

public String Mix (String str) {
    //This scrambles up the words in the string array
    if(str == null) {
        str = wordPick[track];
    }
    char[] characters = str.toCharArray();
    for (int i = 0; i < characters.length; i++) {
        int randomIndex = (int)(Math.random() * characters.length);
        char temp = characters[i];
        characters[i] = characters[randomIndex];
        characters[randomIndex] = temp;
    }

    str = String.valueOf(characters);
    return str;
}
}

清单

<?xml version="1.0" encoding="utf-8"?>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

如果需要的话,我也将activity_main.xml留在这里

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context="com.example.roland.scramblegame.MainActivity"
android:background="#006699">

<Chronometer
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/chronometer"
    android:textSize="25sp"
    android:textStyle="bold"
    android:textColor="#ffffff"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="SCRAMBLED WORD"
    android:id="@+id/Question"
    android:enabled="false"
    android:textSize="30sp"
    android:textStyle="bold"
    android:textColor="#FFFFFF"
    android:background="#427030"
    android:padding="5dp"
    android:layout_above="@+id/Answer"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="70dp" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/Answer"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:width="250dp"
    android:background="#dddddd"
    android:height="45dp"
    android:clickable="false"
    android:singleLine="true"
    android:minHeight="35dp"
    android:inputType="text" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/StartButton"
    android:id="@+id/StartB"
    android:layout_below="@+id/Answer"
    android:layout_alignStart="@+id/Answer"
    android:layout_marginTop="43dp" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/EnterButton"
    android:id="@+id/EnterB"
    android:layout_alignTop="@+id/StartB"
    android:layout_alignEnd="@+id/Answer" />

</RelativeLayout>

我认为错误可能来自您onCreate以下代码:

run = new MainActivity();
wordPick = new String[16];
wordPick = run.Fill(wordPick);

您确定需要通过new Activity()创建活动吗? 这有点奇怪,不建议使用。

尝试将三行替换为:

wordPick = Fill(new String[16]);

也许可以帮上忙。

只是不要初始化新的MainActivity变量。 这不是必需的,它似乎是您的应用程序崩溃的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM