【问题标题】:Android activity loosing my input from UI when I press the back button当我按下后退按钮时,Android 活动失去了我从 UI 中的输入
【发布时间】:2018-10-12 19:24:21
【问题描述】:

我是 Android 编程的新手。

我在 Android Studio 中创建了一个简单的 Empty Activity 应用,它有一堆 UI 字段。在我输入这些输入字段后,如果我按下后退按钮,活动将被破坏,丢失我输入的所有数据。

但如果我按下主页按钮并切换到另一个应用程序并返回到我的应用程序,数据就在那里。

我需要做什么才能不丢失输入的数据?

更新:

看来我将不得不使用共享首选项。

但是想知道像谷歌浏览器这样的应用程序是如何保存大量数据的,比如网页、网页上的输入字段等

【问题讨论】:

    标签: android destroy android-ondestroy


    【解决方案1】:

    按回键实际上是在破坏 Activity 并丢失任何输入的数据。

    您可以使用Shared Preferences 来保存和检索您输入的任何数据。

    首先初始化 SharedPreferences:

    SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPref.edit();
    

    然后从 EditText 中提取您输入的文本,并替换下面的 YOUR_TEXT。

    editor.putString("unique_name", YOUR_TEXT);
    editor.commit();
    

    请记住

    唯一名称

    必须是您要保存的每个值的唯一名称。

    关闭并返回活动后,您可以检索已保存的值,如下所示:

    SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
    String YOUR_TEXT = sharedPref.getString("unique_name", "");
    

    【讨论】:

    • 我同意这个答案,但希望看到更多关于如何使用共享首选项的说明。
    • 其他应用程序(如谷歌地图、Chrome 等)是如何保持应用程序的完整状态(网页、滚动条位置、网页上的输入字段等)的?
    • 更新了我的答案。 @Mck 它通常用于保存少量数据,在这种情况下 - 几个字符串。
    • 我用什么来保存大量数据?
    • SQLite 带有包装库,例如 Room。或者,您也可以使用 Firebase 或 Realm。
    【解决方案2】:

    对于大量数据,您可以使用 SQLite Database for android。您应该为此目的使用空间,Room 是一个用于数据持久性的 Android 库。签出Room Practical Guide

    如果您的数据很小,那么您也可以使用共享首选项。 如果您只需要在应用程序运行期间存储用户数据(例如输入),那么您应该使用 ViewModel。 检查这个View Model Guide

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多