首页 文章

注销清除SharedPreferences

提问于
浏览
8

我有登录页面,将用户名和密码保存到共享首选项 . 我有另一个包含注销按钮的Activity类 . 我想在点击退出按钮时清除共享偏好设置 . 问题是我没有从这个类获得SharedPreferences . 我怎样才能获得SharedPreferences?

LoginPage

public class MainActivity extends Activity {
public SharedPreferences.Editor loginPrefsEditor;
    public  SharedPreferences loginPreferences;
    private Boolean saveLogin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    name = (EditText) findViewById(R.id.et_Username);
        pass = (EditText) findViewById(R.id.et_Password);
        login = (Button) findViewById(R.id.bt_Login);


         loginPreferences = getSharedPreferences("loginPrefs", MODE_PRIVATE);
         loginPrefsEditor = loginPreferences.edit();

         saveLogin = loginPreferences.getBoolean("saveLogin", false);



         if (saveLogin == true) {
                name.setText(loginPreferences.getString("username", ""));
                pass.setText(loginPreferences.getString("password", ""));


            }

        login.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v) {
                 name1 = name.getText().toString();
                 pass1 = pass.getText().toString();
               //new Thread (new Task()).start();
                    loginPrefsEditor.putBoolean("saveLogin", true);
                    loginPrefsEditor.putString("username", name1);
                    loginPrefsEditor.putString("password", pass1);
                    loginPrefsEditor.commit();
                 new myAsyncTask().execute();
            }
        });
}

AnotherActivity中的注销按钮

logout.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                // Launching News Feed Screen

                Intent i = new Intent(getApplicationContext(), MainActivity.class);
                startActivity(i);
            }
        });

5 回答

  • 0

    试试这个 !

    logout.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View view) {
                // Launching News Feed Screen
    
                 SharedPreferences preferences =getSharedPreferences("loginPrefs",Context.MODE_PRIVATE);
                 SharedPreferences.Editor editor = preferences.edit();
                 editor.clear();
                 editor.commit();
                 finish();
     });
    
  • 0

    我认为你在理解android中的共享首选项时遇到了麻烦 .

    根据官方文件

    要获取应用程序的SharedPreferences对象,请使用以下两种方法之一:getSharedPreferences() - 如果需要使用第一个参数指定的名称标识的多个首选项文件,请使用此方法 . getPreferences() - 如果您的Activity只需要一个首选项文件,请使用此选项 . 因为这将是您的Activity的唯一首选项文件,所以您不提供名称 .

    您应该有一个上下文来使用上述两种方法 .

    共享首选项也存储为键值对,因此清除应该意味着您将值设置为某个空字符串 .

    有关详细信息和更好的解释,请参阅此处http://developer.android.com/guide/topics/data/data-storage.html#prefhttp://www.vogella.com/tutorials/AndroidFileBasedPersistence/article.html

    希望这会有所帮助 .

    干杯!

  • 26

    它很简单 . 就像你在 SharedPrefernce 中保存数据一样

    SharedPreferences sp = getSharedPreferences("MYKEY",0);
    SharedPreferences.Editor editor = sp.edit();
    editor.putString("username" , username);
    editor.putString("password" , password);
    

    现在,您可以像在任何类别的应用中一样检索,

    SharedPreferences sp = getSharedPreferences("MYKEY",0);
    String uname = sp.getString("username");
    String pwd = sp.getString("password");
    

    并清除您的用户名和密码

    editor.clear();
    editor.commit();
    

    要么

    editor.remove("username");
    editor.remove("password");
    editor.commit();
    
  • 1

    为什么不编写SharedPreference实用程序类 . 这可以从两个活动中访问 .

  • 1
    SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = mPrefs.edit();
    editor.clear();
    editor.commit();
    

相关问题