2014-12-11 4 views
24

공유 환경 설정에서 플레이어의 이름을 저장하려고 시도하고 공유 환경 설정에서 다시 가져 와서 다른 액티비티에 표시하려고하지만 앱이 다운됩니다.java.lang.NullPointerException : null 객체 참조에서 가상 메소드를 호출하려고 시도했습니다.

FATAL EXCEPTION : 메인

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 

번호 :

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

,745

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

때문에 mPlayer=null :

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

답변

38

앱 충돌은입니다.

PlayGame 활동에서 Player mPlayer을 초기화하는 것을 잊었습니다.

mPlayer = new Player(context,""); 
관련 문제