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()函数打开数据库。
- android 数据存储api
- Android 本地数据存储 API
- Android 本地数据存储 API
- 理解 Android 本地数据存储 API
- 理解 Android 本地数据存储 API
- 理解 Android 本地数据存储 API
- 理解 Android 本地数据存储 API
- 理解 Android 本地数据存储 API
- 理解 Android 本地数据存储 API
- Android学习笔记十三.Android数据存储与IO.File存储常用API
- Android文件存储API
- 理解 Android 本地数据存储 API--利用首选项、SQLite 和内部及外部内存 API
- Android | Android数据存储
- Android数据存储(五) SQLite数据库在Android中的API
- android 7.0文件存储API
- Android数据存储--网络存储
- Android数据存储:File存储
- Android 数据存储--文件存储
- 构造函数
- MFC程序发布版编译方法
- Java-数组
- 多个github帐号的SSH key切换
- 治疗老胃病(胃寒型老胃病)的偏方
- android 数据存储api
- jquery 弹出层 弹窗
- C# 获取bin目录下的文件
- The Light and Dark sides of Python name binding
- Java ClassLoader深入讲解
- sqlserver 函数游标
- linux下vi命令大全
- android 内容提供器api
- Java中使用Socket连接判断Inputstream结束