【问题标题】:My shared preferences are deleting when updating app on google play store在 google play store 上更新应用程序时,我的共享首选项正在删除
【发布时间】:2018-06-12 09:04:23
【问题描述】:

我为登录屏幕上的“记住我”操作创建了一个类。我将用户数据存储在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
    }
}

【问题讨论】:

  • 使用 sharedEditor.commit();安装 sharedEditor.apply();
  • @AD10 这不会解决问题。
  • @AD10 你确定吗?因为尝试会很长。我知道; “应用”函数只能异步工作,不能返回值。

标签: android android-studio login sharedpreferences android-manifest


【解决方案1】:

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

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"),
                ""
        );
    }
}

【讨论】:

  • 谢谢,但它正在删除。
  • @Onur 你在 google play store 上更新应用程序之前是否获取或打印了数据
  • 没有。我删除应用程序并重新安装。我不明白为什么这不会删除?请你说好吗?
  • 更换您的设备并使用其他设备重试
  • 我已经尝试过使用 2 个不同的移动设备,我的问题不是保存数据,而是在版本更改后被删除。
猜你喜欢
  • 2019-02-18
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多