代码之家  ›  专栏  ›  技术社区  ›  Sonhja

Android-在应用程序的整个生命周期中保持变量的价值

  •  -1
  • Sonhja  · 技术社区  · 11 年前

    我有一个移动应用程序,一旦安装,它必须生成一个随机 String 必须在其整个生命周期中保留,直到卸载。

    我想用 static variables ,但已发布 here ,如果我终止应用程序,静态变量将再次为空,并将重新初始化。

    我需要做的是在安装APK期间创建一个随机字符串,并在安装应用程序时保持其值,无论它是否被终止。

    有没有办法实现这一点?

    6 回复  |  直到 9 年前
        1
  •  2
  •   Yash Sampat    11 年前

    你需要使用 SharedPreferences 。关于如何获取和设置 SharedPreference here .

        2
  •  1
  •   Mahadev Dalavi    11 年前
    When You install your app then you have to store value in shardeprefrence is better option for you
    
        3
  •  1
  •   subair_a    11 年前

    使用共享首选项

    private static final String _KEY = "app_unique_key";
    private static final String _PREFERENCE = "preference";
    public void saveKey(String appKey) {
        SharedPreferences preferences = getSharedPreferences(_PREFERENCE, Context.MODE_PRIVATE);
        SharedPreferences.Editor preferenceEditor = preferences.edit();
        preferenceEditor.putString(_KEY, appKey);
        preferenceEditor.apply();
    }
    
    public String getAppKey() {
        SharedPreferences preferences = getSharedPreferences(_PREFERENCE, Context.MODE_PRIVATE);
        return preferences.getString(_KEY, null);
    }
    
        4
  •  1
  •   Merlí Escarpenter Pérez    11 年前

    我想你需要使用 SharedPreferences vars…如果您需要保存int、float等,则此方法仅用于String值。您可以创建不同的方法,也可以在需要时应用代码。我认为最好的方法是在方法中,因为您不需要重复代码,并且控制值更容易……请参阅下面的代码了解如何使用sharedPreferences:

    //Declaration of variables
    //This var is name from file of shared preferences, you can save a different files for SharedPreferences
    public String StartConfig_File = "sharedPref_StartConfig_File";
    
    //And this one is a SharedPreference var from my StartConfig_File
    public String userRemembered = "userRemembered";
    
    
    //Method to get String from SharedPreference
    public String Get_SharedPreferences(Context context, String sharedPref_File,String key_name){
    
        //Declaration of variables
        SharedPreferences sharedPref = context.getSharedPreferences(sharedPref_File, Context.MODE_PRIVATE);
        String result = sharedPref.getString(key_name, null);
    
        return result;
    }
    
    //Method to set String SharedPreference
    public void Set_SharedPreferences(Context context,String sharedPref_File, String key_name,String key_value){
    
        //Declaration of variables
        SharedPreferences sharedPref = context.getSharedPreferences(sharedPref_File,Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPref.edit();
    
        editor.putString(key_name,key_value);
    
        editor.commit();
    }
    

    下面是调用此方法的示例:

    //generalMethods is class where I have sharedPreferences methods! Change for your class...
    
    //Initialize values from SharedPreference
    generalMethods.Set_SharedPreferences(getActivity(),generalMethods.StartConfig_File,generalMethods.userRemembered ,"MyUser");
    
    //Get value from SharedPreference
    String result = generalMethods.Get_SharedPreferences(getActivity(), generalMethods.StartConfig_File, generalMethods.userRemembered );
    

    这个变量只有在卸载应用程序时才会消失,如果你有上下文访问权限,你可以总是得到这个值…告诉我我是否帮助过你,编程很好!

        5
  •  1
  •   Community Mohan Dere    6 年前

    是的,你是对的。如果您将创建一个静态变量,它将一直处于活动状态,直到您的应用程序运行时,它将从后台清除,您的变量值将为空。

    因此,有两种可能性可以解决您的问题:

    1. 使用共享首选项,但如果用户转到设置并从中清除应用程序数据,您将失去价值

    2. 当用户清除应用程序数据或用户卸载应用程序时,用户Sqlite数据库也会丢失数据。

    如果你的数据很大,则使用2,否则最好使用1。

        6
  •  0
  •   Mimmo Grottoli    11 年前

    首先,我将在应用程序中创建字符串。为此,需要创建一个类,该类扩展 android.app.Application ,将类名放在AndroidManifest应用程序标记中,然后重写 onCreate() 用这个

    public void onCreate() {
        super.onCreate();
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
        if (!prefs.containsKey("MY_KEY")) {
            String random = generateYourRandomKey();
            prefs.edit().putString("MY_KEY", random).apply();
        }
    }
    

    然后在项目的每个Activity/Service/BrodcastReceiver中,您可以使用

    String random = PreferenceManager.getDefaultSharedPreferences(aContext).getString("MY_KEY");
    

    其中aContext是“活动/服务”的上下文,依此类推。

    推荐文章