保存可以在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应用程序的所有活动中访问的数组的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章