作为一个完成的应用程序,数据存储操作是必不可少的。因此,Android系统一共提供了四种数据存储方式。分别是:SharePreference、SQLite、Content Provider和File。由于Android系统中,数据基本都是私有的的,都是存放于“data/data/程序包名”目录下,所以要实现数据共享,正确方式是使用Content Provider
adb shell //进入emulator 环境
cd /data/data
ls
SQLite: SQLite是一个轻量级的数据库,支持基本SQL语法,是常被采用的一种数据存储方式。Android为此数据库提供了一个名为SQLiteDatabase的类,封装了一些操作数据库的API。
SharedPreference: 除SQLite数据库外,另一种常用的数据存储方式,其本质就是一个xml文件,常用于存储较简单的参数设置。
File: 即常说的文件(I/O)存储方法,常用语存储大数量的数据,但是缺点是更新数据将是一件困难的事情。
ContentProvider: Android系统中能实现所有应用程序共享的一种数据存储方式,由于数据通常在各应用间的是互相私密的,所以此存储方式较少使用,但是其又是必不可少的一种存储方式。例如音频,视频,图片和通讯录,一般都可以采用此种方式进行存储。每个Content Provider都会对外提供一个公共的URI(包装成Uri对象),如果应用程序有数据需要共享时,就需要使用Content Provider为这些数据定义一个URI,然后其他的应用程序就通过Content Provider传入这个URI来对数据进行操作。
一:使用SharedPreferences存储数据
package tianshuai.AndroidSharedPreferences; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class AndroidSharedPreferences extends Activity { private static final String TAG = "AndroidSharedPreferences"; private EditText etName; private EditText etAge; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btSet = (Button) this.findViewById(R.id.bt_set); Button btRead = (Button) this.findViewById(R.id.bt_read); etName = (EditText) this.findViewById(R.id.et_name); etAge = (EditText) this.findViewById(R.id.et_age); btSet.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 获取名称和年龄 String name = etName.getText().toString(); String age = etAge.getText().toString(); // 创建SharedPreferences SharedPreferences sp = getSharedPreferences("preferences",Context.MODE_PRIVATE); // 添加数据 Editor editor = sp.edit(); editor.putString("name", name); editor.putInt("age", Integer.parseInt(age)); // 保存数据 if (editor.commit()) Toast.makeText(AndroidSharedPreferences.this,R.string.save_success, 1).show(); else Toast.makeText(AndroidSharedPreferences.this,R.string.save_failed, 1).show(); } }); btRead.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 创建SharedPreferences SharedPreferences sp = getSharedPreferences("preferences",Context.MODE_PRIVATE); // 获取数据 String name = sp.getString("name", "defName"); String age = sp.getInt("age", 0) + ""; // 显示数据 etName.setText(name); etAge.setText(age); } }); } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <!-- 姓名 --> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="70dip" android:layout_height="wrap_content" android:textSize="25dip" android:id="@+id/tv_name" android:text="@string/tv_name" /> <EditText android:layout_width="300dip" android:layout_height="wrap_content" android:layout_toRightOf="@id/tv_name" android:id="@+id/et_name" /> </RelativeLayout> <!-- 年龄 --> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="70dip" android:layout_height="wrap_content" android:textSize="25dip" android:id="@+id/tv_age" android:text="@string/tv_age" /> <EditText android:layout_width="300dip" android:layout_height="wrap_content" android:layout_toRightOf="@id/tv_age" android:id="@+id/et_age" /> </RelativeLayout> <!-- 按钮 --> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="right"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/bt_write" android:id="@+id/bt_set" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/bt_set" android:text="@string/bt_read" android:id="@+id/bt_read" /> </RelativeLayout> </LinearLayout>strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, AndroidSharedPreferences!</string> <string name="app_name">Android 应用程序配置</string> <string name="tv_name">姓名</string> <string name="tv_age">年龄</string> <string name="bt_write">设置</string> <string name="bt_read">读取</string> <string name="save_success">保存成功</string> <string name="save_failed">保存失败</string> </resources>
我们为”/data/data/com.changcheng.sharedpreferences/shared_prefs/preferences.xml”。将 preferences.xml导出,查看它的内容为:
adb pull /data/data/com.changcheng.sharedpreferences/shared_prefs/preferences.xml /usr/aa
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <string name="name">长城</string> <int name="age" value="25" /> </map>
void WriteSharedPreferences(String strName,String strPassword) { SharedPreferences user = getSharedPreferences(“user_info”,0); uer.edit(); user.putString(“NAME”,strName); user.putString(“PASSWORD”,strPassword); user.commit(); } void ReadSharedPreferences() { StringstrName,strPassword; SharedPreferences user = getSharedPreferences(“user_info”,0); strName= user.getString(“NAME”,””); strPassword= user getString(“PASSWORD”,””); }
三:SQLite