【问题标题】:Best way to save internal datas?保存内部数据的最佳方法?
【发布时间】:2012-10-05 18:11:23
【问题描述】:

问题是:当我开始学习为 android 开发时,我想我会将我的内部数据存储在一个专用类中的公共静态变量中,仅用于此目的,这样我就可以轻松地从任何活动中访问它们,并且它过去和现在都非常重要,不会有任何重复,并且这些值始终是唯一的,类似于 Singleton 模型。这非常有效,但它肯定不是最漂亮的解决方案。当用户通过主页按钮将应用程序置于后台时,问题就开始了。它仍然存在,因为天知道有多少时间,可能是几分钟,可能是几天,甚至更多……然后他重新打开应用程序,所有这些静态变量都变为空,因为系统已经破坏了它们。这些变量中的一些是简单的字符串,但有些是非常复杂的、自己的类。

第一个问题是,当应用程序进入后台时,我可以依赖任何全局挂钩,我可以在哪里保存这些数据?因此,当用户再次将应用程序拉到前台时,我可以从保存状态重新初始化这些变量。

第二个问题是,保存这些复杂数据的最佳方法是什么?据我了解,对于保存字符串 SharedPreferences 很好,但是更复杂的类呢?我也可以使用 SharedPreferences,还是应该使用其他东西?

目前我能想到的就这些了,谢谢提前帮助!

【问题讨论】:

    标签: android android-lifecycle


    【解决方案1】:

    类中的整个静态变量是个坏主意。忽略整个全局变量崩溃,它们不会持续存在。如果您需要持久化数据,您应该使用SharedPreferences 或数据库。

    【讨论】:

      【解决方案2】:

      对于您的第一个问题,我相信您正在寻找类似于活动生命周期中的 onResume() 方法的东西。

      关于存储的问题,可以使用 sqlLite。

      【讨论】:

        【解决方案3】:

        document 解释了 Android 上的所有数据存储选项。 SharedPreferences 非常适合简单类型,但听起来您最好使用一个或多个 SQLite 数据库。

        【讨论】:

          【解决方案4】:

          您肯定需要使用共享首选项,这是一个最简单的示例:

          //Create a new class
          
          public class PizzaApplication extends Application {
          
          private static String sharedPreferences = "Pizza";
          private static Context context;
          
          @Override
          public void onCreate (){
              super.onCreate();
              context = this;
          }
          
          public static void saveString(Context context, String key, String value) {
              SharedPreferences sharedPref = context.getSharedPreferences(sharedPreferences,Context.MODE_PRIVATE);
              SharedPreferences.Editor editor = sharedPref.edit();
              editor.putString(key, value);
              editor.commit();
          }
          
          public static String getString(Context context, String pKey) {
              SharedPreferences sharedPref = context.getSharedPreferences(sharedPreferences,Context.MODE_PRIVATE);
              return sharedPref.getString(pKey, null);
          }
          }
          
          //FROM ACTIVITY
          //Save string
          
          PizzaApplication.saveString(getApplicationContext(), "country", "test");
          
          //Receive it 
          
          String testString = PizzaApplication.getString(getApplicationContext(), "country"); //returns "test"
          

          【讨论】:

            猜你喜欢
            • 2013-01-08
            • 1970-01-01
            • 1970-01-01
            • 2012-06-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-07-26
            • 2012-12-24
            相关资源
            最近更新 更多