android 数据存储api

来源:互联网 发布:vue.js window.open 编辑:程序博客网 时间:2024/04/28 22:36

android 数据存储

这里的数据存储主要指的是本地存储,一般有三种方式;

1、应用程序首选项

说明:

android系统中轻量级的数据存储机制

以键值对的方式进行存储,支持的 数据类型:

布尔值、浮点值、整型值、长整型值、字符串。

涉及的类:
SharePreferences

SharePreferences.Editor

使用步骤

1)、获取一个SharePreferences对象的实例

2)、创建一个SharePreferences.Editor来修改首选项

3)、使用Editor修改首选项

4|)、提交修改

demo

写入数据

package com.example.ch10sharepreferencesdemo;import android.content.SharedPreferences;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class MainActivity extends ActionBarActivity {private EditText eText;private Button btn;private TextView text;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.fragment_main);eText = (EditText) findViewById(R.id.editText1);//获取SharedPreferences的一个实例,注,SharedPreferences是单例设计模式SharedPreferences sp = getSharedPreferences("peng", MODE_PRIVATE);SharedPreferences.Editor editor = sp.edit();editor.putString("name", "peng");editor.putString("highest", "0");editor.commit();findViewById(R.id.button1).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//获取存的一个name的值SharedPreferences sp1 = getSharedPreferences("peng",MODE_PRIVATE);String name = sp1.getString("name", "null");eText.setText(name);}});findViewById(R.id.button2).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//清除名为peng的SharedPreferencesSharedPreferences sp1 = getSharedPreferences("peng",MODE_PRIVATE);SharedPreferences.Editor editor=sp1.edit();editor.clear().commit();}});}}

使用案例1:用SharePreferences 判断程序是不是第一次启动:

核心java代码

package com.example.sharepreferencesdemo1;import android.content.SharedPreferences;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.widget.Button;public class MainActivity extends ActionBarActivity {Button btn1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);SharedPreferences spSettings=getSharedPreferences("settings", MODE_PRIVATE);SharedPreferences.Editor spSettingsEditor=spSettings.edit();btn1=(Button)findViewById(R.id.btn1);if(spSettings.getBoolean("first_launch", true)){btn1.setText("第一次启动");spSettingsEditor.putBoolean("first_launch", false);spSettingsEditor.commit();}else {btn1.setText("不是第一次启动");}}}

2、文件系统

说明:

每一个android应用程序都是以其自身的用户运行在底层的Linux操作系统中,它拥有自己的私有应用程序目录和文件。

android应用程序数据存储的目录: /data/data/<包名>/

所用的文件操作均是与应用程序Context对象打交道开始的;

涉及的类:
Context

Context常用的与文件操作相关的方法:

Context.openFileInput() 打开文件以供读取,/files/

Context.openFileOutput() 打开或创建文件以供写入/files/

Context.deleteFile() 删除文件/files

Context.flleList() 获取所有位于/files/下的文件列表

Context.getFilesDir() 获取/files子目录队形

Context.getCacheDir() 获取/cache子目录对象

Context.getDir() 根据名称创建或获取一个应用程序目录。

使用步骤

把一个字符串输出到一个文本文件里

1)、创建一个文件输出流

2)、把一个字符串写入到文本文件中

3)、关闭文件输出流

demo

package com.example.ch10filedemo;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FilterOutputStream;import java.io.IOException;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;public class MainActivity extends ActionBarActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.fragment_main);//创建一个文件输出流FileOutputStream fos = null;String str = "zhifuchuan";try {fos = openFileOutput("peng.txt", MODE_PRIVATE);//把str写入到fos中fos.write(str.getBytes());} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {//关闭文件输出流if (fos != null) {try {fos.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}

读取数据:

//讀取數據FileInputStream fis = null;try {fis = openFileInput("peng.txt");} catch (FileNotFoundException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}String str = null;byte[] buffer=new byte[1024];int len;try {while((len=fis.read(buffer))>0){str+=new String(buffer,0,len);}System.out.println(str);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}

使用案例1:


3、内建的SQLite数据库

可以理解为Android系统为每一个应用程序都分配了一个私有的数据库,存储在特定的应用程序目录中。

/data/data/<应用程序的包名>/databases/<databasename>

注:生成的数据库文件,可以跨平台使用,即通过第三方读取sqlite文件的程序可以读取出来。

如何理解SQLiteDatabase和Cursor?

答:

可以SQLiteDatabase当初JDBC中的Connection和Statement的混合,因为SQLiteDatabase既代表与数据库的连接,又可以之间执行SQL操作;

可以Cursor当成ResultSet,不过Cursor提供了更多便捷的方法来操作结果集。

Android中如何创建一个sqlite数据库?

答:

如何在sqlite数据库的默认位置创建文件?

答:

在一个Activity中调用下面的函数:

openOrCreateDatabase("plans.db", MODE_PRIVATE, null);

如何自定义sqlite数据库文件的位置?

答:

调用SQLiteDatabase类下的静态函数openOrCreateDatabase:

SQLiteDatabase.openOrCreateDatabase(this.getFilesDir().toString()+"/plans.db",null);

如何执行数据库操作 ?

答:execSQL(sql)函数

使用案例1:sqlite数据的CRUD

package com.example.sqlitedemo;import java.util.ArrayList;import java.util.List;import android.annotation.SuppressLint;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.view.Menu;import android.view.MenuItem;import android.widget.ArrayAdapter;import android.widget.EditText;import android.widget.ListView;import com.example.entity.Plan;@SuppressLint("NewApi")public class MainActivity extends ActionBarActivity {SQLiteDatabase db;EditText textTitle;EditText textContent;ListView allPlan;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// sqlite学习 创建一个日程管理软件// db=SQLiteDatabase.openOrCreateDatabase(this.getFilesDir().toString()+"/plans.db",null);db = openOrCreateDatabase("plans.db", MODE_PRIVATE, null);// 创建数据库的语句String createPlanSql = "CREATE TABLE IF NOT EXISTS iplan(_id integer primary key autoincrement,plan_title varchar(40),plan_content varchar(200))";// 插入数据String insertPlanSql = "insert into iplan values(null,?,?)";String selectPlans = "select * from iplan";db.execSQL(createPlanSql);db.execSQL(insertPlanSql, new String[] { "吃", "吃什么" });textTitle = (EditText) findViewById(R.id.title);textContent = (EditText) findViewById(R.id.content);allPlan = (ListView) findViewById(R.id.all_plan);// 查询数据Cursor cursor = db.rawQuery(selectPlans, null);//把查询结果转换为list集合List<Plan> list=new ArrayList<Plan>();while(cursor.moveToNext()){Plan plan=new Plan(cursor.getString(1), cursor.getString(2));list.add(plan);}cursor.close();db.close();}}

注:SQLiteOpenHelper
实际项目中通常是继承SQLiteOpenHelper开发子类,并通过该子类的getReadableDatabase()和getWritableDatebase()函数打开数据库。

0 0
原创粉丝点击