2015-12-19 148 views
0

我正在制作一个应用程序,其中有两个开关按钮,一个用于twitter登录,另一个用于twitter登录。关闭应用程序后保持开关按钮的状态

我已经通过在相同的主题(firstsecond

,但没有其他职位去帮助我,这就是为什么发布的新问题。

所以基本上有一个开关按钮来登录和注销。它工作得很好。如果我关闭应用程序并再次返回到应用程序,那么也可以正常工作,即会话保持完好,但状态按钮被设置为false,即不活动。

我跟着其他的答案,如果我实现,我得到一个错误Caused by: java.lang.IllegalArgumentException: Callback must not be null. (用于twitter登录)。

我会发布一些代码,以解释情况。

tSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, 
             boolean isChecked) { 

       if(isChecked){ 
        SharedPreferences.Editor editor = getSharedPreferences("com.example.anubhaw.socialtwitter", MODE_PRIVATE).edit(); 
        editor.putBoolean("service_status", tSwitch.isChecked()); 
        editor.commit(); 
        loginButton.performClick(); 
       }else{ 
        Twitter.getInstance(); 
        Twitter.logOut(); 
        twitter_layout.setVisibility(View.GONE); 
        Toast.makeText(getApplicationContext(), "Logged out from Twitter", Toast.LENGTH_SHORT).show(); 
       } 

      } 
     }); 

SharedPreferences prefs = getSharedPreferences("com.example.anubhaw.socialtwitter", MODE_PRIVATE); 
    boolean tState = prefs.getBoolean("service_status", false); 

    if(tState){ 
     //Do your work for service is selected on 
     Toast.makeText(getApplicationContext(), "Inside the sharedPref", Toast.LENGTH_SHORT).show(); 
     tSwitch.setChecked(true); 
    } else { 
     //Code for service off 
    } 

如果我删除sharedPref的东西,一切工作正常,除了该开关按钮的状态。

如果您需要更多信息,请让我知道。 感谢

+0

代码出错了?我仍然不明白。 – Blundell

+0

我有两个开关按钮,一个用于Facebook登录,另一个用于twitter登录。我也有两个框架布局(每个框架布局,我展示基本信息并允许用户推特和分享/喜欢)。我的问题是,如果关闭应用程序并重新启动它,我可以返回会话,但切换按钮处于“关闭”阶段(如果我没有实现'SharedPreferences'事件,并且实现SharedPreference之后的错误是(1/2) – driftking9987

+0

我认为这是因为它调用'onCheckChanged'函数(因为它正在改变相同的状态,如果我删除'SharedPreferences'首选项,它工作正常(2/2) – driftking9987

回答

0

您可以使用下面的代码:

sharedPreferences = getSharedPreferences("com.example.anubhaw.socialtwitter", MODE_PRIVATE); 
    preferences = sharedPreferences.edit(); 
    tSwitch.setChecked(sharedPreferences.getBoolean("isChecked",false)); 
    tSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if(isChecked){ 
       preferences.putBoolean("isChecked",true); 
      }else { 
       preferences.putBoolean("isChecked",false); 
      } 
      preferences.commit(); 
     } 
    }); 
+0

谢谢,我必须做一些改变,但是我得到了它的工作,很少有问题,对'sharedPreferences'你使用小's',我们需要'S'(我想知道这是否是故意的我应该在什么地方宣布它?)。然后在第二行中使用了你没有在任何地方声明的'preferecnces'。这个答案指出了我的正确方向。非常感谢。 – driftking9987

+0

只是一个方面..你不需要做一个if其他只是preferences.putBoolean(“isChecked”,isChecked);将工作。 –

0

马哈茂德的代码不能正常工作,需要一些改变。这是一个工作版本。它基本上保存在SharedPreferences中的切换。

private Switch mySwitch; 


// Switch 
    mySwitch = (Switch) findViewById(R.id.mySwitch); 

    boolean value = true; // default value if no value was found 

    final SharedPreferences sharedPreferences = getSharedPreferences("isChecked", 0); 

    value = sharedPreferences.getBoolean("isChecked", value); // retrieve the value of your key 
    mySwitch.setChecked(value); 

    mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if(isChecked){ 
       sharedPreferences.edit().putBoolean("isChecked", true).apply(); 
      }else { 
       sharedPreferences.edit().putBoolean("isChecked", false).apply();; 
      } 
     } 
    }); 
相关问题