最佳日常交易
最佳日常交易

关于Androidbob体育提现bob哪个彩靠谱权威的链接可能会使我们赢得佣金。学到更多。

如何将数据存储在Android应用中bob体育提现

我们深入挖掘可在Android设备上存储数据的不同选项,并配有示例源代码。bob体育提现
经过
2021年5月24日

我们使用或开发的几乎每个应用都必须为一个或另一个目的存储数据。这也不是所有相同的数据 - 有些应用需要访问设置,图像等等。最大的问题是如何管理此数据,以便您的设备只能抓住所需的内容。幸运的是,对于开发人员而言,Android充满了bob体育提现存储数据的方法,我们在这里为您介绍它们的工作方式。

也可以看看:制作没有编程经验的应用程序:您有什么选择?

在本文中,我们将讨论Android开发人员可用的不同数据存储技术,以及示例代码,以使您开始或刷新内存。bob体育提现

存储数据的方法


使用共享首选项

编程C编码开发人员

如果您将原始数据保存为键值对,则共享的偏好是要走的方式。它需要一个键,即字符串,以及该键的相应值。值可以是以下任何一个:布尔值,浮点,int,长或其他字符串。

您的Andbob体育提现roid设备将每个应用程序的共享首选项存储在XML文件中的私有目录中。应用程序还可以拥有一个以上的共享首选项文件,并且它们可用于存储应用程序首选项。

也可以看看:bob体育提现Android Studio 4.1 - 开发人员的新功能

在可以以共享首选项存储数据之前,您必须首先获得共享流程目的。您可以使用两种上下文方法来检索共享Preferences对象。

代码
sharedPreferences sharedPreferences = getPreferences(mode_private);

因为何时您的应用将有一个单个首选项文件,并且

代码
sharedPreferences sharedPreferences = getSharedPreferences(filenamestring,mode_private);

因为当您的应用程序可能具有多个首选项文件,或者您选择命名共享Preferences实例。

在获取共享Preferences对象时,您然后访问其编辑使用edit()方法。要实际添加值,请使用编辑器的putxxx()方法,其中XXX是布尔,字符串,浮点,长,int或stringset之一。您还可以删除带有删除()的键值偏好对。

最后,确保在放置或删除值后调用编辑器的commit()方法。如果您不致电提交,您的更改将不会持续。

代码
sharedPreferences.editor editor = sharedPreferences.edit();editor.putString(键串,valuestring);editor.commit();

对于我们的示例应用程序,我们允许用户指定共享Preferences文件名。如果用户指定了名称,我们请求使用该名称的共享流程;如果没有,我们请求默认的共享Preference对象。

代码
字符串filenamestring = sharedPreferencesBinding.fileNameEditView.getText()。toString();sharedPreferences sharedPreferences;if(filenamestring.isempty()){sharedPreferences = getPreferences(mode_private);} else {sharedPreferences = getSharedPreferences(filenamestring,mode_private);}

不幸的是,无法获得您应用程序存储的所有共享Preferences文件的单个列表。取而代之的是,如果您存储多个文件,则需要静态列表或访问SharedPreferences名称。

您还可以将您的共享preferences名称保存在默认文件中。如果您需要存储用户首选项,则可能需要使用peferceeeyctitive或preferferceFragment命令。只需记住,他们都使用共享的偏好。


使用内部存储

bob体育提现Android开发工具

在很多时候,您可能需要持久数据,但是您发现共享的偏好太限制了。例如,您可能需要在Java中持续存在对象或图像。您可能还需要使用文件系统层次结构以逻辑上的数据持续存在。这是内部存储所在的地方。它专门用于您需要将数据存储在文件系统上,但是您不希望其他应用程序或用户可以访问。

实际上,此数据存储是如此私密,以至于您卸载应用程序后立即将其从设备中删除。

使用内部存储类似于使用任何其他文件系统保存。您可以获取对文件对象的引用,并且可以使用A的数据来存储几乎任何类型的数据fileOutputstream。它与众不同的是,它的内容只能由您的应用程序访问。

要访问您的内部文件目录,请使用上下文getfilesdir()方法。要在此内部文件目录中创建(或访问)目录,请使用getDir(DirectoryName,context.mode_xxx)方法。GetDir()方法返回对代表指定目录的文件对象的引用,如果不存在,则首先创建它。

代码
文件目录;if(filename.isempty()){directory = getfilesdir();} else {directory = getDir(fileName,mode_private);} file [] files = directory.listfiles();

在上面的示例中,如果用户指定的文件名为空,我们将获得基本的内部存储目录。如果用户指定名称,我们将获得命名目录,如果需要,请先创建。

要读取文件,请使用您首选的文件读取方法。在我们的示例中,我们使用扫描仪对象读取完整的文件。要读取直接在您的内部存储目录中的文件(不在任何子目录中),您可以使用openFileInput(文件名)方法。

代码
FileInputStream fis = OpenFileInput(文件名);扫描仪扫描仪=新扫描仪(FIS);scanner.usedElimiter(“ \\ z”);字符串content = scanner.next();scanner.close();

同样,要访问直接在内部存储目录中写入的文件,请使用OpenFileOutput(文件名)方法。要保存文件,我们使用fileOutputStream写入。

代码
fileOutputStream fos = OpenFileOutput(文件名,context.mode_private);fos.write(internalStorageBinding.saveFileEdittext.getText()。toString()。getBytes());fos.close();

如上图所示,文件路径位于文件管理器或其他应用程序无法访问的文件夹中。唯一的例外将是如果您有扎根设备。


外置储存

Google对外部存储进行了一些关键的更改,从Android 10开始,并继续在Android 11中进行。为了使用户更好地控制文件并减少了bob体育提现混乱,应用程序现在默认情况下对外部存储的访问范围范围。这意味着他们可以利用应用程序创建的外部存储和媒体上的特定目录。

有关请求范围目录访问的更多信息,请查看此信息bob体育提现Android开发人员教程

如果您的应用程序试图访问其未创建的文件,则必须每次都允许它这样做。如果您删除应用程序,则您在选定文件夹之外存储的数据也将消失。

期望应用程序将文件存储在专为应用程序特定持续文件和缓存文件设计的两个特定于应用程序的位置之一中。要访问这些位置,该应用程序必须验证存储空间(不能保证,因为它是内部存储的)。可以使用:

代码
Environment.getExternalStorAgestage()。

如果返回Media_mounted,则意味着您可以将文件读取并写入外部存储。您会发现许多预定义的目录,这些目录应有助于逻辑存储并防止混乱。其中包括Directory_documents和Directory_movies之类的。

您可以阅读有关如何使用示波器存储的完整说明这里


SQLITE数据库

打字编码编码键盘

最后,Androibob体育提现d提供了支持应用程序使用SQLite数据库进行数据存储的支持。您创建的数据库始终对您的应用程序进行特定,并且只能在您的应用程序内访问。当然,在尝试使用SQLITE数据库存储数据之前,您至少应该有一些SQL知识。

也可以看看:五个简单步骤的完整初学bob体育提现者Android应用程序开发指南

我们将依次讨论其中的每一个,并为示例代码使用数据绑定技术。bob体育提现Android为SQLite数据库提供了完整的支持。创建SQLITE数据库的推荐方法是子类别sqliteopenhelper类并覆盖onCreate()方法。对于此示例,我们创建一个表。

代码
公共类SampleSqlitedBhelper扩展了SQLiteOpenHelper {私有静态final int int database_version = 2;公共静态最终字符串database_name =“ sample_database”;公共静态最终字符串person_table_name =“ person”;公共静态最终字符串person_column_id =“ _id”;公共静态最终字符串person_column_name =“ name”;公共静态最终字符串person_column_age =“ age”;公共静态最终字符串person_column_gender =“性别”;public samplesqlitedbhelper(上下文上下文){super(context,database_name,null,database_version);} @Override public void onCreate(sqlitedatabase sqlitedatabase){sqlitedatabase.execsql(“ create table” + person_table_name +“(“ + person_column_id +” integer +“ integer +” integer“ integer”+ person_column_gender +“ text” +“)”); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + PERSON_TABLE_NAME); onCreate(sqLiteDatabase); } }

添加数据:

代码
private void savetodb(){sqlitedatabase database = new sampleSqlitedBhelper(this).getWritabledatabase();contentValues values = new contentValues();values.put(samplesqlitedbhelper.person_column_name,activityBinding.nameEdittext.getText()。toString());values.put(samplesqlitedbhelper.person_column_age,activityBinding.ageEdittext.getText()。toString());values.put(samplesqlitedbhelper.person_column_gender,activityBinding.genderEdittext.getText()。toString());long newRowid = database.insert(samplesqlitedbhelper.person_table_name,null,values);toast.maketext(this,“新行IS为” + newRowid,toast.length_long).show();}

读取数据:

代码
private void readfromdb(){字符串name = activityBinding.nameEdittext.getText()。tostring();字符串性别= ActivityBinding.genderEdittext.getText()。toString();字符串age = activityBinding.ageEdittext.getText()。toString();if(age.isempty())age =“ 0”;sqlitedatabase database = new samplesqlitedbhelper(this).getReadableDatabase();string []投影= {samplesqlitedbhelper.person_column_id,samplesqlitedbhelper.person_column_name,sampleSqlitedbhelper.person_column_age,sampleSqlitedblitedbhelper.personbhelper.person_column_gender_gender};字符串选择= sampleSqlitedbhelper.person_column_name +“ like?and” + samplesqlitedbhelper.person_column_age +”>?and“ + samplesqlitedbhelper.person_column_gender_gender_gender +” like?”;string [] selectionargs = {“%” +名称 +“%”,“年龄”,“%” +性别 +“%”};光标光标= database.query(samplesqlitedbhelper.person_table_name,//查询投影的表格,//返回选择的列,// wery chrause selectionArgs的列,// wery carse null for Where chause null的值't将行null组分组,//请勿按行组进行过滤null //不要排序);log.d(“ tag”,“总光标计数为“ + cursor.getCount()); activityBinding.recycleView.setAdapter(new MyRecyclerViewCursorAdapter(this, cursor)); }

SQLite存储为您的应用提供了全功能的关系数据库的功率和速度。如果您打算存储以后查询的数据,则应考虑使用SQLite存储选项。


保存缓存文件

bob体育提现Android开发人员新闻

bob体育提现Android还提供了一种缓存一些数据而不是永久存储数据的方法。您可以在内部存储或外部存储中缓存数据。当设备在空间上较低时,Android系统可能会删除缓存文件。bob体育提现

也可以看看:如何在三星Galaxy S10上清除应用程序缓存

要获取内部存储缓存目录,请使用getCachedir()方法。这将返回代表应用程序内部存储目录的文件对象。您可以使用类似命名的外部缓存目录访问外部缓存目录getExternalcachedir()

尽管Android设备可以bob体育提现在需要时删除您的缓存文件,但您不应依靠此行为。取而代之的是,您应该自己维护缓存文件的大小,并始终尝试将缓存保持在合理的限制范围内,例如建议的1MB。


那么,您应该使用哪种方法?

如何安装Java

使用每种可用的不同存储方法存在优势和缺点。共享首选项最容易使用,尤其是在您要存储离散的原始数据类型的情况下。但是,内部和外部存储最适合存储诸如音乐,视频和文档之类的文件,而如果您需要在数据上进行快速搜索和查询,则SQLITE会获胜。

最终,您选择的存储方法应取决于数据类型,需要数据的时间长度以及您希望数据的私有时间。

您仍然可以获取上面应用程序的源代码在github上如果您希望自己练习。随意使用它,如您所见,并随时在下面的评论中脱颖而出。

阅读下一篇:Python vs Java:您应该学到哪种语言,有什么区别?