java.lang.NullPointerException: Attempt to invoke virtual method on a null object reference
本问题已经有最佳答案,请猛点这里访问。
我试图在共享偏好中保存玩家的名字,并通过在共享偏好中再次获取它而使其显示在另一个活动中但我的应用程序崩溃。
致命异议:主要
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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); } |
您的应用崩溃发生在:
1 |
因为
您忘了在PlayGame活动中初始化
1 | mPlayer = new Player(context,""); |