保存可以在android应用程序的所有活动中访问的数组的最佳方法是啥?

Posted

技术标签:

【中文标题】保存可以在android应用程序的所有活动中访问的数组的最佳方法是啥?【英文标题】:What is the best way to save an array that can be accessed in all activities of an android app?保存可以在android应用程序的所有活动中访问的数组的最佳方法是什么? 【发布时间】:2020-11-08 07:45:21 【问题描述】:

我正在编写一个需要能够保存数据的应用程序,以便用户下次进入应用程序时保存他们的进度。我在想一个数组,其值将随着用户做出选择而更新,这将是实现这一点的最简单方法。我的第一个想法是创建一个具有读写方法的类文件,以便所有活动都可以更新和读取数组中的数据,但我认为当应用程序关闭或我发布更新时该数组不会是永久的。最好确保我的保存数组在应用关闭和未来更新之间是永久的?

【问题讨论】:

将数组转换为json字符串,存储在共享首选项中,并在应用启动时从共享首选项中获取 这能回答你的问题吗? Is it possible to add an array or object to SharedPreferences on android 这可能会对您有所帮助。 save-arraylist-to-sharedpreferences 【参考方案1】:

您可以通过多种方式做到这一点。

    使用 SharePreferences
//To add or update a data
SharedPreferences sharedPref;
sharedPref = getSharedPreferences("AnyNameForSharedPref", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("name", name);
editor.putString("email", email);
editor.putString("phone", phone);
editor.putString("gender", gender);
editor.apply();


//To get the data

final SharedPreferences sharedPref = getSharedPreferences("AnyNameForSharedPref", Context.MODE_PRIVATE);
sharedPref.getString("name", "Default text if it is not present"));
    使用房间

由于 Room 基于 SQLite 数据库,如果没有大量数据要存储,您可以避免使用它。要使用 ROOM,请添加以下依赖项:

dependencies 
  def room_version = "2.2.5"

  implementation "androidx.room:room-runtime:$room_version"
  annotationProcessor "androidx.room:room-compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor

  // optional - Kotlin Extensions and Coroutines support for Room
  implementation "androidx.room:room-ktx:$room_version"

  // optional - RxJava support for Room
  implementation "androidx.room:room-rxjava2:$room_version"

  // optional - Guava support for Room, including Optional and ListenableFuture
  implementation "androidx.room:room-guava:$room_version"

  // Test helpers
  testImplementation "androidx.room:room-testing:$room_version"

这是 ROOM 的官方文档和示例。 Android ROOM

【讨论】:

【参考方案2】:

您有很多选择来完成这项工作。 首先,您可以使用 SQLite 数据库(如果我是您,我会使用它)。 创建扩展 SQLiteOpenHelper 的类,例如:

public class DBHelper extends SQLiteOpenHelper 

public DBHelper(Context context) 
super(context, DATABASE_NAME, null, 1);


public void onCreate(SQLiteDatabase db) 
public void onDestroy(SQLiteDatabase database, int oldVersion, int newVersion)      

这里是一个如何创建和使用SQLiteDatabase的例子:https://www.tutorialspoint.com/android/android_sqlite_database.htm

其次,您可以使用SharedPreferences。也许,如果除了数组之外没有其他数据,这是一种更简单的方法。

如果您想在线保存数据,可以使用 Firebase。当您希望多个用户共享数据时,这很有用。以下是如何使用 Firebase 的示例: https://blog.mindorks.com/firebase-realtime-database-android-tutorial

【讨论】:

以上是关于保存可以在android应用程序的所有活动中访问的数组的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Android - 播放将在所有活动中播放的背景音乐

如何保存android活动的状态

尝试将数据保存到 android 设备上的可访问文件

是否可以像在 android 中一样为我的应用程序的活动创建一个最近的屏幕

Android阻止恢复活动

在Android中保存一个活动当移动到另一个活动时[重复]