NullPointerException异常复选框共享preferences复选框、异常、NullPointerException、preferences

2023-09-04 05:39:09 作者:时间的流逝

我试图挽救从位于layout.xml文件不同的复选框中的值,使用共享preferences。

I am trying to save the values from different checkboxes located in a layout.xml file, using sharedpreferences.

但是,当我编译程序我得到一个NullPointerException异常,根据logcat的原因是行463,标志着我的code。

But when i compile the program i get a NullPointerException, according Logcat the cause is in line 463, marked in my code.

我试过sevaral东西,但我不能老是摆脱例外。

I tried sevaral things, but i can`t get rid of the exception.

有人能帮帮我吗?

从logcat中的异常:

The Exception from Logcat:

10-29 23:35:31.556: E/AndroidRuntime(3292): FATAL EXCEPTION: main 
10-29 23:35:31.556: E/AndroidRuntime(3292): java.lang.RuntimeException: Unable to resume activity {com.sencide/com.sencide.AndroidLogin}: java.lang.NullPointerException 
10-29 23:35:31.556: E/AndroidRuntime(3292):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2241) 
10-29 23:35:31.556: E/AndroidRuntime(3292):     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2256) 
10-29 23:35:31.556: E/AndroidRuntime(3292):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1789) 
10-29 23:35:31.556: E/AndroidRuntime(3292):     at android.app.ActivityThread.access$1500(ActivityThread.java:123) 
10-29 23:35:31.556: E/AndroidRuntime(3292):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939) 
10-29 23:35:31.556: E/AndroidRuntime(3292):     at android.os.Handler.dispatchMessage(Handler.java:99) 
10-29 23:35:31.556: E/AndroidRuntime(3292):     at android.os.Looper.loop(Looper.java:130) 
10-29 23:35:31.556: E/AndroidRuntime(3292):     at android.app.ActivityThread.main(ActivityThread.java:3835) 
10-29 23:35:31.556: E/AndroidRuntime(3292):     at java.lang.reflect.Method.invokeNative(Native Method) 
10-29 23:35:31.556: E/AndroidRuntime(3292):     at java.lang.reflect.Method.invoke(Method.java:507) 
10-29 23:35:31.556: E/AndroidRuntime(3292):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 
10-29 23:35:31.556: E/AndroidRuntime(3292):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 
10-29 23:35:31.556: E/AndroidRuntime(3292):     at dalvik.system.NativeStart.main(Native Method) 
10-29 23:35:31.556: E/AndroidRuntime(3292): Caused by: java.lang.NullPointerException 
10-29 23:35:31.556: E/AndroidRuntime(3292):     at com.sencide.AndroidLogin.onResume(AndroidLogin.java:463) 
10-29 23:35:31.556: E/AndroidRuntime(3292):     at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150) 
10-29 23:35:31.556: E/AndroidRuntime(3292):     at android.app.Activity.performResume(Activity.java:3832) 
10-29 23:35:31.556: E/AndroidRuntime(3292):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2231) 
10-29 23:35:31.556: E/AndroidRuntime(3292):     ... 12 more 

的code在我的主程序XML部分:

Part of the code in my Main program xml:

在创建和设置值:

public static final String PREFS_NAME = "SharedPrefsDemoPreferences"; 
public static final String PREF_BOOL = "PrefBool";
private SharedPreferences mPrefs;
private CheckBox mCheckBox;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mPrefs = getSharedPreferences(PREFS_NAME, 0);
    mCheckBox = (CheckBox)findViewById(R.id.nieuwbel);// in layout.xml 

在将OnPause和OnResume:

The OnPause and OnResume:

@Override
protected void onResume() {      
    mCheckBox.setChecked(mPrefs.getBoolean(PREF_BOOL, false)); <-- Line 463   
    super.onResume();}

@Override    
protected void onPause() { 
    Editor e = mPrefs.edit();
    e.putBoolean(PREF_BOOL, mCheckBox.isChecked());              
    e.commit();         
    Toast.makeText(this, "Settings Saved.", Toast.LENGTH_SHORT).show();        
    super.onPause();    }

与复选框的布局文件:

The layout file with the checkbox:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >


<CheckBox
    android:id="@+id/nieuwbel"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:checked="true"
    android:text="Nieuw beltegoed" />


<CheckBox
    android:id="@+id/vorige"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:checked="true"
    android:text="Tegoed vorige periode" />

等等...

and so on...

推荐答案

您需要再次获得共享preferences。在这一点上米preFS 可也空对象。也可以尝试reinstatiating的 mCheckBox 。出现这种情况,如果该活动从的onPause() onResume()不叫的onCreate去( )再次,你有两个instatiation对象正常。

You need to get SharedPreferences again. At that point mPrefs can be also null object. Also try reinstatiating the mCheckBox. This happens if the activity went from onPause() to onResume() not calling onCreate() again where you have instatiation of both object properly.

编辑:

    @Override
    protected void onResume() {      
        mPrefs = getSharedPreferences(PREFS_NAME, 0);
         mCheckBox = (CheckBox)findViewById(R.id.nieuwbel);
        if(mPrefs!=null)  //check in case there are no prefs saved, due some reason
           mCheckBox.setChecked(mPrefs.getBoolean(PREF_BOOL, false));
        else
            mCheckBox.setChecked(true); //here put default value if there are no preferences saved
        super.onResume();
}

编辑2:充气的其他XML

Edit 2: Inflating the other xml.

您把这个里面onResume()

You put this inside onResume()

LayoutInflater inflater = (LayoutInflater)getSystemService
      (Context.LAYOUT_INFLATER_SERVICE);
   View v = inflater.inflate(R.layout.layout, null); // you have the xml as a view from which you can extract the checkbox
   mCheckBox = (CheckBox)v.findViewById(R.id.nieuwbel);
   .... do the rest of the coding in the first edit :)
 
精彩推荐
图片推荐