2014-12-11 10 views
24

Ich versuche den Spielernamen in der gemeinsamen Einstellung zu speichern und ihn in einer anderen Aktivität anzuzeigen, indem ich ihn erneut in der gemeinsamen Einstellung abrufe, aber meine App stürzt ab.java.lang.NullPointerException: Versuch, die virtuelle Methode für eine Nullobjekt-Referenz aufzurufen

Schwerwiegende Ausnahme: main

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); 
} 

Antwort

38

Ihre App Absturz ist:

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

weil mPlayer=null.

Sie haben vergessen, Player mPlayer in Ihrer PlayGame Activity zu initialisieren.

mPlayer = new Player(context,""); 
Verwandte Themen