2013-11-28 3 views
0

Я использую кнопку переключения с SQLite в Android. Я хочу сохранить значения Toggle Button в общих предпочтениях и сохранить значения общих настроек в SQLite. Когда я запускаю приложение, я получил Null Pointer Exception для кнопки переключения.Как использовать общие настройки в Android?

У меня нет идеи, как сохранить логическое значение в общих привилегиях. Вот мой код и журнал Cat.

Вот мой Переключить ButtonCode

toggleButton_Addto_Contacts = (ToggleButton) findViewById(R.id.toggleButton_Add_To_Contacts); 

toggleButton_Addto_Contacts.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     // TODO Auto-generated method stub 


     if(isChecked) 
     { 
      System.out.println("Toggle Button Is On"); 

      SharedPreferences.Editor editor = preferences.edit(); 
      editor.putBoolean("YES", true); // value to store 
      strBooleanValue=sharedPref.getBoolean("YES",true); 
      strToggleVlaue=String.valueOf(strBooleanValue); 
      System.out.println("Toggle Button Value Is =" + strToggleVlaue); 
      editor.commit(); 

     } 
     else 
     { 

       System.out.println("Toggle Button Is Off"); 
       SharedPreferences.Editor editor = preferences.edit(); 
       editor.putBoolean("NO", false); // value to store 
       strBooleanValue=sharedPref.getBoolean("NO", false); 
       strToggleVlaue=String.valueOf(strBooleanValue); 
       System.out.println("Toggle Button Value Is =" + strToggleVlaue); 
       editor.commit(); 

     } 
    } 
}); 



11-28 15:13:26.054: E/AndroidRuntime(707): FATAL EXCEPTION: main 
11-28 15:13:26.054: E/AndroidRuntime(707): java.lang.NullPointerException 
11-28 15:13:26.054: E/AndroidRuntime(707): at com.lead_management_project.New_Lead_Activity5$5.onCheckedChanged(New_Lead_Activity5.java:172) 
11-28 15:13:26.054: E/AndroidRuntime(707): at android.widget.CompoundButton.setChecked(CompoundButton.java:124) 
11-28 15:13:26.054: E/AndroidRuntime(707): at android.widget.ToggleButton.setChecked(ToggleButton.java:69) 
11-28 15:13:26.054: E/AndroidRuntime(707): at android.widget.CompoundButton.toggle(CompoundButton.java:86) 
11-28 15:13:26.054: E/AndroidRuntime(707): at android.widget.CompoundButton.performClick(CompoundButton.java:98) 
11-28 15:13:26.054: E/AndroidRuntime(707): at android.view.View$PerformClick.run(View.java:9080) 
11-28 15:13:26.054: E/AndroidRuntime(707): at android.os.Handler.handleCallback(Handler.java:587) 
11-28 15:13:26.054: E/AndroidRuntime(707): at android.os.Handler.dispatchMessage(Handler.java:92) 
11-28 15:13:26.054: E/AndroidRuntime(707): at android.os.Looper.loop(Looper.java:123) 
11-28 15:13:26.054: E/AndroidRuntime(707): at android.app.ActivityThread.main(ActivityThread.java:3683) 
11-28 15:13:26.054: E/AndroidRuntime(707): at java.lang.reflect.Method.invokeNative(Native Method) 
11-28 15:13:26.054: E/AndroidRuntime(707): at java.lang.reflect.Method.invoke(Method.java:507) 
11-28 15:13:26.054: E/AndroidRuntime(707): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
11-28 15:13:26.054: E/AndroidRuntime(707): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
11-28 15:13:26.054: E/AndroidRuntime(707): at dalvik.system.NativeStart.main(Native Method) 
+0

что у вас есть в строке 172 в файле 'New_Lead_Activity5.java' – SathishKumar

+0

В строке 172 = strBooleanValue = sharedPref.getBoolean (" YES ", true); в файле New_Lead_Activity5.java. – tazeenmulani

+0

Вы инициализировали свой 'sharedPref' – SathishKumar

ответ

1

Попробуйте изменить, как показано ниже,

if(isChecked) 
      { 
       System.out.println("Toggle Button Is On"); 

       SharedPreferences.Editor editor = preferences.edit(); 
       editor.putBoolean("YES", true); // value to store 
       editor.commit(); 
       strBooleanValue=preferences.getBoolean("YES",true); 
       strToggleVlaue=String.valueOf(strBooleanValue); 
       System.out.println("Toggle Button Value Is =" + strToggleVlaue); 


      } 
else 
     { 

       System.out.println("Toggle Button Is Off"); 
       SharedPreferences.Editor editor = preferences.edit(); 
       editor.putBoolean("NO", false); // value to store 
       editor.commit(); 
       strBooleanValue=preferences.getBoolean("NO", false); 
       strToggleVlaue=String.valueOf(strBooleanValue); 
       System.out.println("Toggle Button Value Is =" + strToggleVlaue); 


     } 
0

вы не инициализируется preferences или sharedPref где-нибудь в вашем коде, и это у вы получаете NullPointerException

Также есть что-то не так в вашем следующем фрагменте кода : -

editor.putBoolean("YES", true); // value to store 
strBooleanValue=sharedPref.getBoolean("YES",true); 

Необходимо сначала позвонить commit(), а затем tr y, чтобы получить доступ к значению, которое вы указали в настройках.

+0

I allready инициализирует настройки в методе onCreate(), подобные этим предпочтениям = getPreferences (MODE_PRIVATE); – tazeenmulani

+0

, то, возможно, ваш 'sharedPref' имеет значение null .. – d3m0li5h3r

0

смотрите ниже ответ

creating sharedpreferences 
    SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode 
    Editor editor = pref.edit(); 

    Storevalues 
    editor.putBoolean("key_name", true); // Storing boolean - true/false 
    editor.putString("key_name", "string value"); // Storing string 
    editor.putInt("key_name", "int value"); // Storing integer 
    editor.putFloat("key_name", "float value"); // Storing float 
    editor.putLong("key_name", "long value"); // Storing long 

    editor.commit(); // commit changes 

    retrive from shared preference 

    SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode 
    pref.getString("key_name", null); // getting String 
    pref.getInt("key_name", null); // getting Integer 
    pref.getFloat("key_name", null); // getting Float 
    pref.getLong("key_name", null); // getting Long 
    pref.getBoolean("key_name", null); // getting boolean 
0

После setContentView Просто позвоните loadSavedPreferences()

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.setting); 
     loadSavedPreferences(); 
      //remaining code 
} 

Позвони savePreferences (Boolean переключаемые) в onCheckedChanged

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    // TODO Auto-generated method stub 
     savePreferences(Boolean toggle); 
    if(isChecked) 
    { 
     System.out.println("Toggle Button Is On"); 
     System.out.println("Toggle Button Value Is =" + strToggleVlaue); 


    } 
    else 
    { 

      System.out.println("Toggle Button Is Off"); 
      System.out.println("Toggle Button Value Is =" + strToggleVlaue); 


    } 
} 
}); 


private void loadSavedPreferences() { 
      SharedPreferences sharedPreferences =PreferenceManager.getDefaultSharedPreferences(this); 
      strToggleVlaue==getBoolean("Checked_State",true); 
     } 

    private void savePreferences(Boolean toggle) { 

      SharedPreferences sharedPreferences PreferenceManager.getDefaultSharedPreferences(this); 
      Editor editor = sharedPreferences.edit(); 
      editor.putBoolean("Checked_State",toggle); 
      editor.commit(); 

     } 

Примечание: написать отдельный метод для общего доступа к загрузке и сохранению, чтобы в будущем вы хотите сохранить любое другое значение, которое вы можете легко изменить.

Смежные вопросы