2017-01-10 53 views
0

我有問題,其中HomeActivity類中的uncheckAll()方法收到空對象引用。但問題是我已經在MyPreferenceActivity類中引用了對象(checkboxPreferenceEvent和checkBoxPreferenceQuote)。希望你們能幫我解決這個問題。爲什麼checkboxpreference是一個空對象首選項

謝謝..

checkBoxPreferenceEvent = checkBoxPreferenceArrayList.get(0); 
checkBoxPreferenceQuote = checkBoxPreferenceArrayList.get(1); 

錯誤

E/InputEventReceiver: Exception dispatching input event. 
E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback 
E/MessageQueue-JNI: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.preference.CheckBoxPreference.setChecked(boolean)' on a null object reference 
         at com.example.user.uniselic.MyPreferencesActivity.uncheckAll(MyPreferencesActivity.java:51) 
         at com.example.user.uniselic.HomeActivity.onOptionsItemSelected(HomeActivity.java:193) 
         at android.app.Activity.onMenuItemSelected(Activity.java:2928) 
         at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:406) 
         at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:195) 
         at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:103) 

MyPreferencesActivity.java

package com.example.user.uniselic; 

import android.content.Context; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.preference.CheckBoxPreference; 
import android.preference.Preference; 
import android.preference.PreferenceActivity; 
import android.preference.PreferenceFragment; 
import android.preference.PreferenceScreen; 
import android.preference.TwoStatePreference; 
import android.util.Log; 
import android.widget.Toast; 

import com.google.firebase.messaging.FirebaseMessaging; 

import java.util.ArrayList; 


/** 
* Created by User on 11/1/2016. 
*/ 

public class MyPreferencesActivity extends PreferenceActivity{ 

    ArrayList<CheckBoxPreference> checkBoxPreferenceArrayList; 
    CheckBoxPreference checkBoxPreferenceQuote; 
    CheckBoxPreference checkBoxPreferenceEvent; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     MyPreferenceFragment myPreferenceFragment = new MyPreferenceFragment(); 
     getFragmentManager().beginTransaction().replace(android.R.id.content,myPreferenceFragment).commit(); 

     checkBoxPreferenceArrayList = myPreferenceFragment.getCheckBoxPreferenceArrayListInner(); 

     if(!checkBoxPreferenceArrayList.isEmpty()){ 
      checkBoxPreferenceEvent = checkBoxPreferenceArrayList.get(0); 
      checkBoxPreferenceQuote = checkBoxPreferenceArrayList.get(1); 
      Toast.makeText(MyPreferencesActivity.this,"size arraylist:"+checkBoxPreferenceArrayList.size(),Toast.LENGTH_SHORT).show(); 
     }else{ 
      Toast.makeText(MyPreferencesActivity.this,"listview is empty",Toast.LENGTH_SHORT).show(); 
     } 

    } 

    public void uncheckAll(){ 
     Log.d("testing","calling uncheckAll method"); 
     checkBoxPreferenceEvent.setChecked(false); 
     checkBoxPreferenceQuote.setChecked(false); 


    } 

    public class MyPreferenceFragment extends PreferenceFragment{ 

     CheckBoxPreference checkBoxPreferenceEvent; 
     CheckBoxPreference checkBoxPreferenceQuote; 
     ArrayList<CheckBoxPreference> checkBoxPreferenceArrayListInner = new ArrayList<>(); 

     public MyPreferenceFragment(){ 

      checkBoxPreferenceArrayListInner.add(checkBoxPreferenceEvent); 
      checkBoxPreferenceArrayListInner.add(checkBoxPreferenceQuote); 

     } 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      addPreferencesFromResource(R.xml.preferences); 

      //initialize checkbox preferences. 
      checkBoxPreferenceEvent = (CheckBoxPreference) findPreference("applicationUpdatesEvent"); 
      checkBoxPreferenceQuote = (CheckBoxPreference) findPreference("applicationUpdatesQuote"); 


      //listener for checkbox event 
      checkBoxPreferenceEvent.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { 
       @Override 
       public boolean onPreferenceClick(Preference preference) { 
        PreferenceScreen preferenceScreen = getPreferenceScreen(); 
        if(((CheckBoxPreference)preferenceScreen.findPreference("applicationUpdatesEvent")).isChecked()){ 

         //initalize sharepreferences 
         SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(ConfigBundle.SETTING, Context.MODE_PRIVATE); 
         //set value on shareprefenrence. 
         SharedPreferences.Editor editor = sharedPreferences.edit(); 
         editor.putBoolean(ConfigBundle.SETTING_NOTIFICATION_EVENT,true); 
         editor.commit(); 
         FirebaseMessaging.getInstance().subscribeToTopic("event"); 
         Toast.makeText(getActivity(),"Event Notification Enable",Toast.LENGTH_LONG).show(); 
         return true; 
        }else{ 
         //initalize sharepreferences 
         SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(ConfigBundle.SETTING, Context.MODE_PRIVATE); 
         //set value on shareprefenrence. 
         SharedPreferences.Editor editor = sharedPreferences.edit(); 
         editor.putBoolean(ConfigBundle.SETTING_NOTIFICATION_EVENT,false); 
         editor.commit(); 
         FirebaseMessaging.getInstance().unsubscribeFromTopic("event"); 
         Toast.makeText(getActivity(),"Event Notification Disable",Toast.LENGTH_LONG).show(); 
         return false; 
        } 
       } 
      }); 

      //listener for checkbox quote 
      checkBoxPreferenceQuote.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { 
       @Override 
       public boolean onPreferenceClick(Preference preference) { 
        PreferenceScreen preferenceScreen = getPreferenceScreen(); 
        if(((CheckBoxPreference)preferenceScreen.findPreference("applicationUpdatesQuote")).isChecked()){ 

         //initalize sharepreferences 
         SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(ConfigBundle.SETTING, Context.MODE_PRIVATE); 
         //set value on shareprefenrence. 
         SharedPreferences.Editor editor = sharedPreferences.edit(); 
         editor.putBoolean(ConfigBundle.SETTING_NOTIFICATION_QUOTE,true); 
         editor.commit(); 
         FirebaseMessaging.getInstance().subscribeToTopic("quote"); 
         Toast.makeText(getActivity(),"Quote Notification Enable",Toast.LENGTH_SHORT).show(); 
         return true; 
        }else{ 
         //initalize sharepreferences 
         SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(ConfigBundle.SETTING, Context.MODE_PRIVATE); 
         //set value on shareprefenrence. 
         SharedPreferences.Editor editor = sharedPreferences.edit(); 
         editor.putBoolean(ConfigBundle.SETTING_NOTIFICATION_QUOTE,false); 
         editor.commit(); 
         FirebaseMessaging.getInstance().unsubscribeFromTopic("quote"); 
         Toast.makeText(getActivity(),"Quote Notification Disable",Toast.LENGTH_SHORT).show(); 
         return false; 
        } 
       } 
      }); 


     } 

     //get arraylist that contain checkboxpreference 
     public ArrayList<CheckBoxPreference> getCheckBoxPreferenceArrayListInner(){ 
      return checkBoxPreferenceArrayListInner; 
     } 


    } 



} 

HomeActivity.java

/*To make our option menu active,ovveride this method 
    so that we can add function fo each option menu that been created */ 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()){ 
      case R.id.menu_1: 
       Intent intent = new Intent(HomeActivity.this,ContactActivity.class); 
       startActivity(intent); 
       break; 
      case R.id.menu_2: 
       Intent intent2 = new Intent(HomeActivity.this,MyPreferencesActivity.class); 
       startActivity(intent2); 
       break; 
      case R.id.menu_3: 
       //remove all information user from sharepreference. 
       SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(ConfigBundle.SETTING, Context.MODE_PRIVATE); 
       SharedPreferences.Editor editor = sharedPreferences.edit(); 
       editor.putBoolean(ConfigBundle.SETTING_FIRST_TIME,true); 
       editor.putString(ConfigBundle.SETTING_ID,""); 
       editor.putString(ConfigBundle.SETTING_EMAIL,""); 
       editor.putString(ConfigBundle.SETTING_USERNAME,""); 
       editor.putBoolean(ConfigBundle.SETTING_NOTIFICATION_EVENT,false); 
       editor.putBoolean(ConfigBundle.SETTING_NOTIFICATION_QUOTE,false); 
       editor.commit(); 

       MyPreferencesActivity myPreferencesActivity = new MyPreferencesActivity(); 
       myPreferencesActivity.uncheckAll(); 

       FirebaseMessaging.getInstance().unsubscribeFromTopic("event"); 
       FirebaseMessaging.getInstance().unsubscribeFromTopic("quote"); 
       FirebaseMessaging.getInstance().unsubscribeFromTopic("news"); 

       //then go to main login activity content. 
       Intent intent3 = new Intent(HomeActivity.this,LoginActivity.class); 
       startActivity(intent3); 
     } 
     return super.onOptionsItemSelected(item); 
    } 
+2

的可能的複製(HTTP [什麼是空指針異常,以及如何解決這個問題?]://計算器.COM /問題/ 218384 /什麼 - 是 - 一 - NullPointerException異常和知識-DO-I-FIX-IT) – shmosel

回答

0

看來你的活動不具有ContentView給init:

setContentView(R.layout.your_view); 
相關問題