Android系统中有五种数据存储方式,各有各的特点。如下简单介绍:
1.文件存储:以I/O流行式把数据存入手机内存或者SD卡,可以存储大数据,如音乐、图片或视频等。
2.SharedPreference:它本质上是一个XNL文件,以Map<Object,Object>形式存入手机内存中。经常用于存储简单的参数设置,如QQ登录账号密码的存储等。
3.SQLite数据库:SQLite是一个轻量级、跨平台的数据库。数据库中所有信息都存入单一文件内,占用内存小,并且支持基本SQL语法。是项目中经常被采用的一种数据存储方式,通常用于存储用户信息。
4.ContentProvider:又称内容提供者,是Android四大组件之一,以数据库形式存入手机内存,可以共享自己的数据给其他应用使用。相对于其它对外共享数据的方式而言,ContentProvider统一了数据访问方式,使用起来规范。
5.网络存储:把数据存储到服务器,不存储在本地,使用的时候直接从网络中获取,避免了手机端信息丢失以及其他的安全隐患。
下面做一个文件存储的案例:(介绍一下程序所需要的重点)
内部存储是指将应用程序中的数据以文件方式存储到设备的内部存储空间中(该文件位于data/data/<packagename>/files/目录下),openFileOutput用于打开应用程序中对应的输出流,将数据存储到指定文件中;openFileInput用于打开应用称重对应的输入流,用于从文件中读取数据。mode是指文件的操作模式,也就是读写的方式,有四种 MODE_PRIVATE:该文件只能被当前应用程序读写,默认的操作模式。
MODE_APPEND:该文件的内容可以追加。经常使用的一种。
MODE_WORLD_READABLE:该文件的内容可以被其他文件读取,安全性低。
MODE_WORLD_WRITEABLE:该文件的内容被其他程序的写入,安全性低。
byte[] buffer=new byte[fis.available]一个缓冲作用。
案例代码如下:
创建布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_bian"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="bzu.edu.cn.bian.bianActivity"
android:orientation="vertical"
android:background="@drawable/a">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="小便签"
android:textSize="40dp"
android:layout_marginLeft="50dp"
android:layout_gravity="center"
android:layout_marginTop="120dp"
/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:hint="请输入你的内容:"
android:textSize="30dp"
android:layout_marginLeft="50dp"
android:id="@+id/e1"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:layout_marginLeft="150dp"
android:background="#FF7256"
android:text="保存"
android:id="@+id/b1"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:layout_marginLeft="10dp"
android:background="#FF7256"
android:text="读取"
android:id="@+id/b2"/>
</LinearLayout>
</LinearLayout>
主函数代码:
package bzu.edu.cn.bian;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class bianActivity extends AppCompatActivity {
private Button b1;
private Button b2;
private EditText e1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bian);
b1=(Button) findViewById(R.id.b1);
b2=(Button) findViewById(R.id.b2);
e1=(EditText) findViewById(R.id.e1);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String a1=e1.getText().toString().trim();
FileOutputStream c1;
try{
c1=openFileOutput("data.txt", Context.MODE_APPEND);
c1.write(a1.getBytes());
c1.close();
}catch (Exception e){
e.printStackTrace();
}
Toast.makeText(bianActivity.this, "数据保存成功!", Toast.LENGTH_SHORT).show();
}
});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String wen="";
try{
FileInputStream c2=openFileInput("data.txt");
byte[] buffer=new byte[c2.available()];
c2.read(buffer);
wen=new String(buffer);
c2.close();
}
catch (Exception e){
e.printStackTrace();
}
Toast.makeText(bianActivity.this, "Ta:"+wen, Toast.LENGTH_SHORT).show();
}
});
}
}实现效果如下
以上是此次的数据存储的一个基本案例。