Ich versuche, eine einfache Anwendung zu starten, die beim Klicken auf eine Schaltfläche (StartButton) eine Mix() -Methode startet, die ein zufällig ausgewähltes Wort aus einem String-Array (wordPick) scrambelt und den Text von a setzt Textfeld (ScambleF) zu ihm. Von dort liest ein weiterer Knopf (EnterButton) aus einem editierbaren Textfeld (EnterF) und prüft, ob das vom Benutzer eingegebene Wort im Textfeld EnterF mit dem Wort unverschlüsselt übereinstimmt.Die App kann nicht in Android Studio ausgeführt werden. NullPointerException
Leider bekomme ich sofort den folgenden Fehler beim Starten der App in meinem Emulator. Ich habe hier nach einer Antwort gesucht, aber bis jetzt ist das einzige, was geholfen hat, meine Variablen vor onCreate() nicht zu initialisieren.
EDIT: Es ist ein Chronometer hinzugefügt, aber im Moment hat es keine Funktionalität.
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)
Hier ist meine Java-Datei
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;
}
}
Das Manifest
<?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>
Und benötigt, wenn ich nur die activity_main.xml hier verlassen denken zu
<?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>
Sie können eine 'Activity' nicht mit' new' instanziieren und lassen sie korrekt arbeiten. Warum versuchst du das überhaupt? Rufen Sie einfach Ihre 'Fill()' Methode direkt in 'onCreate()' auf. Außerdem sollten Sie den Java-Namenskonventionen folgen und die Methodennamen mit Kleinbuchstaben beginnen. –
Mögliches Duplikat von [Was ist eine NullPointerException und wie behebe ich sie?] (Http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) –
"Sie können eine Aktivität nicht mit neuen Instanzen instantiieren und lassen sie richtig funktionieren. Warum versuchen Sie das trotzdem? Rufen Sie einfach Ihre Fill() Methode direkt in onCreate() auf." Wow, ich habe das 'neue' los und alles funktioniert jetzt, ich bin nur ein totaler Anfänger, wenn es um das Codieren geht, also mache ich dumme kleine Fehler so. Vielen Dank!! – THEROFLBOAT