1. Introdução à tecnologia de persistência
Ou seja, os dados armazenados na memória serão perdidos. precisam ser armazenados em um dispositivo de armazenamento. A tecnologia de persistência fornece um meio para permitir que os dados tentem novamente a transição entre o estado transitório e o estado persistente.
O desenvolvimento Android fornece três tecnologias de persistência de dados:
Segundo, armazenamento de arquivos
文件存储不对存储内容进行任何的格式化处理,所有数据都是原封不动地保存到文件当中,因而它比较适合用于存储一些简单地文本数据。
A classe Context fornece um método openFileOutput(), que pode ser usado para armazenar dados em um arquivo especificado.
Este método usa dois parâmetros,
第一个参数是文件名,在文件创建的时候使用的就是这个名称,注意这里指定的文件名不可以包含路径,因为所有的文件都是默认存储到/data/data/<packagename/files/目录下的。
第二个参数是文件的操作模式,主要有两种模式可选,MODE PRIVATE和MODE APPEND。其中MODE PRIVATE是默认的操作模式,表示当指定同样文件名的时候所写入的内容将会覆盖原文件中的内容,而MODE APPEND 则表示如果该文件已存在,就往文件里面追加内容,不存在就创建新文件。
O código a seguir mostra como armazenar um conteúdo de texto em um arquivo:
public void save(String inputText) {
FileOutputStream out=null;
BufferedWriter writer=null;
try {
out=openFileOutput("data", Context.MODE_PRIVATE);
writer=new BufferedWriter(new OutputStreamWriter(out));
writer.write(inputText);
}catch(IOException e){
e.printStackTrace();
}finally {
try {
if(writer!=null){
writer.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
}
Principalmente essas três linhas de código:
out=openFileOutput("data", Context.MODE_PRIVATE);
writer=new BufferedWriter(new OutputStreamWriter(out));
writer.write(inputText);
Depois de construir o objeto Writer, você pode gravar o arquivo com Writer.write(inputText);
1. Crie um novo projeto FilePersistenceTest
Modifique o arquivo activity_main.xml nele:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<EditText
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#00ff00"
android:hint="请输入内容"/>
</LinearLayout>
2. Modifique o arquivo MainActivity
public class MainActivity extends AppCompatActivity {
private EditText edit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit=(EditText) findViewById(R.id.edit);
}
@Override
protected void onDestroy() {
super.onDestroy();
String inputText =edit.getText().toString();
save(inputText);
}
public void save(String inputText) {
FileOutputStream out=null;
BufferedWriter writer=null;
try {
//文件名字是:data,文件书写类型是覆盖
out=openFileOutput("data", Context.MODE_PRIVATE);
//将文件写入的参数传入,构建出writer对象
writer=new BufferedWriter(new OutputStreamWriter(out));
//调用writerd的write方法,写入文件。
writer.write(inputText);
}catch(IOException e){
e.printStackTrace();
}finally {
try {
if(writer!=null){
writer.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
}
}
Quando a atividade é destruída, o método save é chamado para gravar o texto no arquivo.
3. Visualize o conteúdo do arquivo
O método de visualização no livro foi descontinuado. O novo método de visualização é: na barra superior do Android Studio, Exibir >> Janelas de ferramentas >> Explorador de arquivos do dispositivo e depois visualizá-lo na pasta dados/dados.
Isso pode ser visto no arquivo.
4. Leia os dados do arquivo
Semelhante ao armazenamento de dados em um arquivo, a classe Context também fornece um método openFileInput() para ler dados de um arquivo. Este método é mais simples que o openFileOutput(), ele aceita apenas um parâmetro, ou seja, o nome do arquivo a ser lido, e então o sistema automaticamente carregará o arquivo no diretório /data/data//files/, e retornará um FileInputstream object, get Depois de obter esse objeto, os dados podem ser lidos por meio do fluxo Java.
Os exemplos são os seguintes:
public String load(){
FileInputStream in=null;
BufferedReader reader=null;
StringBuilder content=new StringBuilder();
try {
//配置读取参数
in = openFileInput("data");
//使用读取参数构建reader
reader=new BufferedReader(new InputStreamReader(in));
String line="";
//一行行读取内容,并且放置到content中
while((line=reader.readLine())!=null){
content.append(line);
}
}catch(IOException e){
e.printStackTrace();
}finally {
try {
if(reader!=null){
reader.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
return content.toString();
}
Então você só precisa modificar o código em MainActivity acima:
public class MainActivity extends AppCompatActivity {
private EditText edit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit=(EditText) findViewById(R.id.edit);
String inputText=load();
if(!TextUtils.isEmpty(inputText)){
//读取到内容了就更新
edit.setText(inputText);
//焦点放置到最后位置
edit.setSelection(inputText.length());
Toast.makeText(this, "读取到内容啦", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
String inputText =edit.getText().toString();
save(inputText);
}
public void save(String inputText) {
FileOutputStream out=null;
BufferedWriter writer=null;
try {
//文件夹名字是:data,文件书写类型是覆盖
out=openFileOutput("data", Context.MODE_PRIVATE);
//将文件写入的参数传入,构建出writer对象
writer=new BufferedWriter(new OutputStreamWriter(out));
//调用writerd的write方法,写入文件。
writer.write(inputText);
}catch(IOException e){
e.printStackTrace();
}finally {
try {
if(writer!=null){
writer.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
}
public String load(){
FileInputStream in=null;
BufferedReader reader=null;
StringBuilder content=new StringBuilder();
try {
//配置读取参数
in = openFileInput("data");
//使用读取参数构建reader
reader=new BufferedReader(new InputStreamReader(in));
String line="";
//一行行读取内容,并且放置到content中
while((line=reader.readLine())!=null){
content.append(line);
}
}catch(IOException e){
e.printStackTrace();
}finally {
try {
if(reader!=null){
reader.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
return content.toString();
}
}
Efeito alcançado:
Três, armazenamento SharedPreferences
Esta solução de armazenamento tem as seguintes características:
1,以键值对进行存储
2,支持多种数据结构进行存储,存的时候是什么数据结构,取出来的时候就是什么数据结构。
A primeira etapa no armazenamento de dados em SharedPreferences é obter o objeto SharedPreferences. Existem três métodos:
1. O método getSharedPreferences() na classe Context
Este método recebe dois parâmetros. O primeiro parâmetro é usado para especificar o nome do arquivo SharedPreferences. Se o arquivo especificado não existir, um será criado. Os arquivos SharedPreferences são armazenados no diretório /data/data//shared prefs/.
O segundo parâmetro é usado para especificar o modo de operação, atualmente apenas MODE PRIVATE é opcional, é o modo de operação padrão e o efeito é o mesmo que passar diretamente em 0, o que significa que apenas o aplicativo atual pode acessar o arquivo SharedPreferences para Leia e escreva.
2, getPreferences na classe Activity
Este método é muito semelhante ao método getSharedPreferences() em Context, porém aceita apenas um parâmetro de modo de operação, pois ao utilizar este método, o nome da classe atualmente ativa será automaticamente utilizado como o nome do arquivo SharedPreferences.
3. O método getDefaultSharedPreferences() na classe PreferenceManager
Este é um método estático que usa um parâmetro Context e prefixa automaticamente o arquivo SharedPreferences com o nome do pacote do aplicativo atual.
4. Armazene dados no arquivo SharedPreferences
(1)调用SharedPreferences 对象的edit)方法来获取一个SharedPreferences.Editor对象。
(2)向 sharedPreferences.Editor 对象中添加数据,比如添加一个布尔型数据就使用putBoolean()方法,添加一个字符串则使用 putstring()方法,以此类推。
(3)调用 apply()方法将添加的数据提交,从而完成数据存储操作。
5. A primeira etapa: criar um novo projeto e modificar Main_activity.html
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/save_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="保存"/>
</LinearLayout>
6. A segunda etapa é modificar o arquivo de atividade
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button saveData =(Button) findViewById(R.id.save_data);
saveData.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
SharedPreferences.Editor editor=getSharedPreferences("data",MODE_PRIVATE).edit();
editor.putString("name","Tom");
editor.putInt("age",24);
editor.putBoolean("married",false);
editor.apply();
}
});
}
}
Após clicar no botão, ele será salvo imediatamente. Você precisa ir até a barra superior do Android Studio, Exibir >> Ferramenta Windows >> Device File Explorer; e depois verificar na pasta dados/dados.
7. Leia dados de SharedPreferences
Modifique o código em xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/save_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="保存"/>
<Button
android:id="@+id/restore_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="获取数据"/>
</LinearLayout>
Modifique o código na atividade:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button saveData =(Button) findViewById(R.id.save_data);
Button restoreData =(Button) findViewById(R.id.restore_data);
saveData.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
SharedPreferences.Editor editor=getSharedPreferences("data",MODE_PRIVATE).edit();
editor.putString("name","Tom");
editor.putInt("age",24);
editor.putBoolean("married",false);
editor.apply();
}
});
restoreData.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
SharedPreferences pref=getSharedPreferences("data",MODE_PRIVATE);
String name=pref.getString("name","");
Toast.makeText(MainActivity.this, name, Toast.LENGTH_SHORT).show();
}
});
}
}
Quatro, banco de dados SQLite
Android tem um banco de dados. Agora existe uma biblioteca de código aberto LitePal para realizar a adição, exclusão, modificação e consulta de dados.
Ele adota o modo de mapeamento objeto-relacional (ORM), que é um banco de dados que entendemos muito bem.Uma classe de entidade corresponde a uma tabela em nosso banco de dados. A biblioteca também encapsula muitos métodos, mesmo que você tenha pouco conhecimento de instruções SQL, você pode construir um banco de dados bem, bem como várias adições, exclusões, modificações e consultas.
Esta seção, porque de acordo com o método do livro, relatará um erro. pular primeiro