ボタンで使用するすべてのメソッド(ボタンのonClickなど)に新しいSharedPreferencesオブジェクトを作成する必要があるのはなぜですか? 2回目の例のように、クラスの初めに一度だけ作成して、それをどのメソッドから追加したり削除したりするのはなぜですか? 2つ目の例のようにメソッドの外側に2行移動すると、アクティビティを開始するとき(別のアクティビティから移動するとき)、「アプリケーションが予期せず停止しました - 強制終了」というメッセージで直接クラッシュします。SharedPreferencesオブジェクトをメソッド外に作成するとアプリケーションがクラッシュする
例1 - これは例2
public class FormEdit extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
...
Button btnSave = (Button) findViewById(R.id.btnSave);
btnSave.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
SharedPreferences myPref = getSharedPreferences("PrefData", MODE_PRIVATE);
SharedPreferences.Editor myPrefEditor = myPref.edit();
...
myPrefEditor.putString("Key", value);
myPrefEditor.commit();
...
に動作します -
public class FormEdit extends Activity {
SharedPreferences myPref = getSharedPreferences("PrefData", MODE_PRIVATE);
SharedPreferences.Editor myPrefEditor = myPref.edit();
@Override
public void onCreate(Bundle savedInstanceState) {
...
Button btnSave = (Button) findViewById(R.id.btnSave);
btnSave.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
...
myPrefEditor.putString("Key", value);
myPrefEditor.commit();
=更新= ログの猫は動作しません:おそらくあなたは一度クリックするとので
E/AndroidRuntime(620):
Uncaught handler: thread main exiting due to uncaught exception
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.devtest/com.devtest.FormEdit}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
at android.app.ActivityThread.access$2200(ActivityThread.java:119)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4363)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:146)
at com.devcom.android.devtest.IceEdit.<init>(IceEdit.java:20)
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1479)
at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409)
... 11 more
logcatにエラーを貼り付けることができますか? "アプリのクラッシュ"は良い問題の説明ではありません:) – WarrenFaith
申し訳ありませんが、何が起こったのかを当然のことを取ることは簡単です。うまくいけば少し明確になるように質問を明確にした。 –
彼はonCreateの前にmyPrefとmyPrefEditorを初期化するため、NullPointerExceptionが発生する可能性があります。 –