爲什麼我需要爲其使用的每種方法(如onClick for buttons)創建一個新的SharedPreferences對象? 爲什麼我不能在類的開頭創建一次,然後像任何第二個示例中那樣從任何方法中使用它來添加和刪除它? 如果我像第二個示例中那樣將兩行移動到方法之外,那麼當活動應該開始時(當我從另一個活動轉到該活動時),它會直接崩潰並顯示消息「應用程序意外停止 - 強制關閉」。在方法崩潰之外創建SharedPreferences對象應用程序
例1 - 這個工程
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();
...
例2 - 不工作
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 2011-12-15 00:22:21
對不起,容易把事情理所當然會發生什麼。澄清了這個問題,所以希望不會更清楚。 – 2011-12-15 01:14:20