android - 在 Google Play 商店更新应用程序时我的共享偏好被删除

标签 android android-studio authentication sharedpreferences android-manifest

我为登录屏幕上的“记住我”操作创建了一个类。我将用户数据存储在 SharedPreferences 上。它在 Android Studio 上进行调试时有效。我在 build.gradle 文件上更改了 versionCodeversionName。一切正常,SharedPreferences 数据可用。但是当我从 Google Play 商店更新时,我的数据正在删除。谢谢你的回答。

RememberMe.java : getLastUser() 返回的模型变量为空。

public class RememberMe {

    private SharedPreferences           sharedPreferences;
    private SharedPreferences.Editor    sharedEditor;
    public  static  int                 USERNAME_AND_PASSWORD = 0,
            USERNAME = 1;

    public RememberMe(Context context) {
        sharedPreferences  = PreferenceManager.getDefaultSharedPreferences(context);
        sharedEditor       = sharedPreferences.edit();
    }

    /**
     * @param userIdentity Example; username, email.
     * @param userPassword
     * @param isLastUser If this value is true 'getLastUser' function will get this user.
     */
    public void addUser(String userIdentity, String userPassword, boolean isLastUser){
        // Save user.
        sharedEditor.putString(userIdentity, userPassword);

        // Make last user.
        if (isLastUser){
            sharedEditor.putString("remember_me_last_user", userIdentity);
        }

        // Commit
        sharedEditor.apply();
    }

    @Nullable
    public String getUserPassword(String userIdentity){
        return sharedPreferences.getString(userIdentity, null);
    }

    public RememberMeModel getLastUser(int resultType){
        if (resultType == USERNAME_AND_PASSWORD){
            return new RememberMeModel(
                    sharedPreferences.getString("remember_me_last_user", null),
                    getUserPassword(sharedPreferences.getString("remember_me_last_user", null))
            );
        }

        return new RememberMeModel(
                sharedPreferences.getString("remember_me_last_user", null),
                null
        );
    }
}

在 manifest.xml 中

android:allowBackup="true"
android:fullBackupContent="true"

在build.gradle中

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.oka.okaoka"
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 8
        versionName "v1.0.8"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        targetCompatibility 1.8
        sourceCompatibility 1.8
    }
}

最佳答案

尝试这种方式对我有用,这里我使用 key 保存数据

import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable;

public class RememberMe {

    public static SharedPreferences sharedPreferences;
    public static SharedPreferences.Editor sharedEditor;
    public static int USERNAME_AND_PASSWORD = 0,USERNAME = 1;
    public static String USER_IDENTITY_KEY = "user_identity_key";
    public static String USER_PASSWORD_KEY = "user_password_key";


    public RememberMe(Context context) {
        if (sharedPreferences == null) {
            sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
        }

        if (sharedEditor == null) {
            sharedEditor = sharedPreferences.edit();
        }
    }

    /**
     * @param userIdentity Example; username, email.
     * @param userPassword
     * @param isLastUser   If this value is true 'getLastUser' function will get this user.
     */
    public void addUser(String userIdentity, String userPassword, boolean isLastUser) {
        // Save user.
        //sharedEditor.putString(userIdentity, userPassword);//you need to pass key
        saveStr(USER_IDENTITY_KEY,userIdentity);
        saveStr(USER_PASSWORD_KEY,userPassword);

        // Make last user.
        if (isLastUser) {
            //sharedEditor.putString("remember_me_last_user", userIdentity);
            saveStr("remember_me_last_user",userIdentity);
        }



    }

    public static void saveStr(String key, String value) {
        sharedEditor.putString(key, value);
        sharedEditor.commit();
    }

    public static String getStr(String key) {
        return sharedPreferences.getString(key, "");
    }

    @Nullable
    public String getUserPassword() {
         return getStr(USER_IDENTITY_KEY);
    }

    public RememberMeModel getLastUser(int resultType) {
        if (resultType == USERNAME_AND_PASSWORD) {
            return new RememberMeModel(
                    getStr("remember_me_last_user"),
                    getUserPassword()
            );
        }

        return new RememberMeModel(
                getStr("remember_me_last_user"),
                ""
        );
    }
}

关于android - 在 Google Play 商店更新应用程序时我的共享偏好被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50813260/

相关文章:

android - 系统在android中找不到指定的路径ndk build

android - 获取 http ://schemas. android.com/apk/res/android 时出错

android - 为什么我们没有一个文件来打开 Android Studio 项目?

authentication - 如何在 iOS App 中使用客户端证书认证

java - Android 上的 SAML

ios - 您能否删除 iOS 移动设备上安装程序用户代理(不同于 Safari)使用的 cookie?

java - GridLayout SurfaceView 子级在更改其可见性时会相互覆盖

android - 指南针精度困境

android - java.lang.NoSuchMethodError : org. apache.commons.codec.binary.Base64.encodeBase64

android - 如何获取 Android 罗盘读数?