2016-05-04 3 views
-1

初級Java/Androidデベロッパーはここにあります。私はこれが信じられないほど尋ねられる質問であることを知っていますが、見つけられたすべてのスレッドから試したことすべてがうまくいきません。どんなものでも。どちらかがnullを返すか、まったく動作しなくなり、SharedPreferencesオブジェクトを取得するための行にエラーがスローされます。これが本当に小さなエラーである場合はお詫び申し上げます。SharedPreferencesは、使用するメソッドに関係なくnullを返します

下記の完全なトレーストレースとコード。

05-03 20:35:38.225 18928-18928/com.example.admin2.clicker E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.example.admin2.clicker, PID: 18928 
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.admin2.clicker/com.example.admin2.clicker.Home}: java.lang.NullPointerException: Attempt to invoke interface method 'android.content.SharedPreferences$Editor android.content.SharedPreferences.edit()' on a null object reference 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2327) 
    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 interface method 'android.content.SharedPreferences$Editor android.content.SharedPreferences.edit()' on a null object reference 
    at com.example.admin2.clicker.Home.<init>(Home.java:50) 
    at java.lang.Class.newInstance(Native Method) 
    at android.app.Instrumentation.newActivity(Instrumentation.java:1067) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2317) 
    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) 

コード:

// Used to fetch SharedPreferences object 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_home); 

    TextView xpText = (TextView) findViewById(R.id.xpText); 
    TextView lvText = (TextView) findViewById(R.id.lvText); 

    xpText.setText("Experience: 0/100"); 
    lvText.setText("Level 1"); 

    gameData = this.getSharedPreferences("gameData", MODE_PRIVATE); 
} 

// The line throwing the error + its context 
{ 
    //boolean firstRun = gameData.getBoolean("f", false); 
    boolean firstRun = true; 
    if (firstRun) { 
     SharedPreferences.Editor e = gameData.edit(); 
      e.putInt("xp", 0); 
      e.putInt("mxp", 100); 
      e.putInt("lv", 1); 
      e.putInt("$", 0); 
      e.putInt("$c", 0); 
     e.apply(); 
    } 
} 

ご質問があるか、より多くの情報が必要な場合は、私に知らせてください。私は私が提供する必要があるすべてのことがわかりません。ありがとう。

+1

[Null Pointer Exceptionとは何ですか?それを修正するにはどうすればいいですか?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how -do-i-fix-it) –

+0

'gameData.edit()'をいつ使用しようとしていますか?あなたのコードは不完全なようです。 – Grender

+0

@Grender gameData.edit()は、アプリケーションが最初に実行されたかどうかをチェックするときに使用されます。そこに宣言されているエディタがあります( 'SharedPreferences.Editor e = gameData.edit()')。 – redpr1sm

答えて

0

コードブロックをinitializer blockに編集すると、実際にgameDataに値を割り当てるonCreate()より前に実行されます。それがNullpointerExceptionにつながっています。

通常、onCreate()が呼び出されるまで、Activityで何もしないでください。特に、あなたがやっていることは、好みを扱うときのようにContextが必要です。

これを修正するには、gameDataに値を割り当てた後で、イニシャライザブロック内のコードをonCreate()メソッドに移動します。

0

これを試してみると、データを保存するためにファイルを宣言しなければなりません。

SharedPreferences pref; 
SharedPreferences.Editor editor; 

pref = getSharedPreferences("MyPref", 0); // 0 - for private mode 
editor = pref.edit(); 

私はSharedPreferencesに保存したいデータを更新するためにcommit()を使用します。あなたの場合のように

editor.putInt("xp", 0); 
editor.putInt("mxp", 100); 
editor.putInt("lv", 1); 
editor.putInt("$", 0); 
editor.putInt("$c", 0); 

editor.commit(); 

私はこれがあなたを助けることを望みます。ありがとう。

+0

エディタ変数を割り当てる前に初期化を試みました。エディター自体を宣言していますが、_does_ workは宣言していますが、putIntを使用しようとしていません。 Monitor throws '原因:java.lang.NullPointerException:インターフェイスメソッド 'android.content.SharedPreferences $ Editorを呼び出そうとしました。アンドロイド.content.SharedPreferences $ Editor.putInt(java.lang.String、int) – redpr1sm

関連する問題