java.lang.NullPointerException: Poging om virtuele methode aan te roepen op een null-objectreferentie

Ik probeer de naam van de speler op te slaan in gedeelde voorkeur en deze weer te geven in een andere activiteit door hem opnieuw te krijgen in gedeelde voorkeur, maar mijn app crasht.

FATALE UITZONDERING: hoofd

Process: plp.cs4b.thesis.drawitapp, PID: 1970
 java.lang.RuntimeException: Unable to start activity ComponentInfo{plp.cs4b.thesis.drawitapp/plp.cs4b.thesis.drawitapp.PlayGame}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String plp.cs4b.thesis.drawitapp.Player.getName()' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
    at android.app.ActivityThread.access$800(ActivityThread.java:144)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5221)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String plp.cs4b.thesis.drawitapp.Player.getName()' on a null object reference
    at plp.cs4b.thesis.drawitapp.PlayGame.onCreate(PlayGame.java:20)
    at android.app.Activity.performCreate(Activity.java:5933)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
    ... 10 more

Codes:

Player.java

public class Player {
private Context context;
private SharedPreferences prefSettingsU;
private SharedPreferences.Editor prefEditorU;
private static final int PREFERENCE_MODE_PRIVATE = 0;
private static final String MY_UNIQUE_PREF_FILE = "DrawItApp";
public Player(Context context, String name) {
    this.context = context;
    saveName(name);
}
public void saveName(String n) {
    prefSettingsU = context.getSharedPreferences(MY_UNIQUE_PREF_FILE, PREFERENCE_MODE_PRIVATE);
    prefEditorU = prefSettingsU.edit();
    prefEditorU.putString("keyName", n);
    prefEditorU.commit();
}
public String getName(Context ctx) {
    prefSettingsU = ctx.getSharedPreferences(MY_UNIQUE_PREF_FILE, PREFERENCE_MODE_PRIVATE);
    String name = prefSettingsU.getString("keyName", "ANONYMOUS");
    return name;
}

PlayGame.java

public class PlayGame extends Activity {
private TextView welcomePlayer;
private ListView createdGames;
private Player mPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.play_game);
    welcomePlayer = (TextView) findViewById (R.id.tvPlayerName);
    welcomePlayer.setText("Welcome Back, " + String.valueOf(mPlayer.getName(this)) + " !");
    createdGames = (ListView) findViewById (R.id.listCreatedGames);
    // adapter etc
    createdGames.setEmptyView(findViewById (R.id.tvNoGames));
}

PlayerName.java

public class PlayerName extends Activity {
private EditText playerName;
private Player mPlayer;
public static Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.player_name);
    context = this;
    playerName = (EditText) findViewById (R.id.etName);
}
public void onC_Confirm(View btnclick) {
    mPlayer = new Player(context, String.valueOf(playerName.getText()));
    //mPlayer.saveName();
    Intent intent = new Intent(PlayerName.this, PlayGame.class);
    startActivity(intent);
}
public void onC_testShPref(View btnclick) {
    Intent intent = new Intent(PlayerName.this, PlayGame.class);
    startActivity(intent);
}

Antwoord 1, autoriteit 100%

Je app crasht om:

welcomePlayer.setText("Welcome Back, " + String.valueOf(mPlayer.getName(this)) + " !");

omdat mPlayer=null.

Je bent vergeten Player mPlayerte initialiseren in je PlayGame-activiteit.

mPlayer = new Player(context,"");

Other episodes