一、使用android系统自带的操作数据的流进行对数据的存储和访问,Context.openInputStream 和Context.openOutputStream的使用.
package com.enterise.always.test.activity;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import android.content.Context;
import android.os.Environment;
/**
*
* @author Always
*
*/
public class FileService {
private Context context;
public FileService(Context context) {
this.context = context;
}
// 文件的保存--在date/date目录xia
public void fileSave(String name, String content) throws IOException {
// TODO Auto-generated method stub
FileOutputStream outStream = context.openFileOutput(name,
Context.MODE_PRIVATE);
outStream.write(content.getBytes());
outStream.close();
}
// 文件的读取在date/date目录xia
public String fileRead(String name) throws IOException {
FileInputStream inStream = context.openFileInput(name);
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
// 文件的对拷
int len;
byte[] by = new byte[1024];
while ((len = inStream.read(by)) != -1) {
outStream.write(by, 0, len);
}
String content = new String(outStream.toByteArray());
outStream.close();
inStream.close();
return content;
}
// 文件的保存 在手机的sacard中
public void fileSave2SDCard(String name, String content) throws IOException {
// 判断手机卡是否是可以读取状态
if (Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED) {
File file = Environment.getExternalStorageDirectory();
FileOutputStream outStream = new FileOutputStream(file);
outStream.write(content.getBytes());
outStream.close();
}
}
}
二、使用SharedPreferenced对数据进行存储和访问。
package com.enterise.always.test.activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
public class FileService {
private Context context;
public FileService(Context context) {
this.context = context;
}
// 存储数据
public void fileSave2SharedPreferences(String name, String content) {
SharedPreferences sp = context.getSharedPreferences(name,
Context.MODE_PRIVATE);
// 得到sharedPreferences对象,第一个参数是文件的名称,第二个是操作文件的类型,有私有化、添加、等模式。
Editor editor = sp.edit();// 得到编辑器
editor.putString("content", content);// 往编辑器中放要存放的内容
editor.commit();// 编辑器提交
}
// 获取数据
public void readFromShared(String name) {
SharedPreferences sp = context.getSharedPreferences(name, Context.MODE_PRIVATE);
String content = sp.getString( "content","");
//这个文件的存储形式类似于map集合有一个key和value
//第一个是key,第二个参数是value,我们是根据前面的key去获取后面的value参数。
//用这个方式保存的数据时底层是使用xml的方式对这些数据进行存储的。
}
}
三、将数据存储在网络程序中,或者从网络程序中获取数据
package com.enterise.always.test.activity;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.content.Context;
public class FileService {
private Context context;
public FileService(Context context) {
this.context = context;
}
/**
* 文件保存到网络中
*
* @param http_url
* @param content
*/
public void save2Http(String http_url, String content) {
try {
URL url = new URL(http_url);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);// 设置应许往里面写数据
conn.setReadTimeout(1000 * 5);// 设置连接的时间
conn.setRequestMethod("GET");
if (conn.getResponseCode() == 200) {
OutputStream outStream = conn.getOutputStream();
outStream.write(content.getBytes());
}
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 从网络中获取数据
* @param http_url
* @return
*/
public String readFromHttp(String http_url) {
String content = null;
try {
URL url = new URL(http_url);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);// 设置应许往外写数据
conn.setRequestMethod("GET");// 设置提交方式为get方式
if (conn.getResponseCode() == 200) {
InputStream inStream = conn.getInputStream();
content = readData(inStream);
}
conn.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
return content;
}
private String readData(InputStream inStream) throws IOException {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] by = new byte[1024];
int len = 0;
while ((len = inStream.read(by)) != -1) {
outStream.write(by, 0, len);
}
String content = new String(outStream.toByteArray());
return content;
}
}
四、使用SQLite数据库进行数据的存储和访问。
package com.enterise.always.test.activity;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class Sqlite extends SQLiteOpenHelper {
// 构造函数用于初始化数据库的名称,版本号。
public Sqlite(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
// 第一次穿件数据库的时候会调用这个方法。用于创建表。以及表的结构。
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE person(personid integer primary key autoincrement ,name varchar(20)");
}
// 当数据库的版本发生变化的时候会调用这个方法,对表进行修改等操作。
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("ALTER TABLE person add phone varchar(12)");
}
}
package com.enterise.always.test.activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
public class FileSqliteService {
public Context context;
private Sqlite sqlite;
public FileSqliteService(Context context) {
this.context = context;
sqlite = new Sqlite(context, "sqlite.db", null, 1);
}
// 使用sql语句进行数据的增删改查。
public void save(Person person) {
SQLiteDatabase database = sqlite.getWritableDatabase();
database.execSQL("insert into person values(?)",
new Object[] { person.getName() });
}
// 2.使用contentvalues进行数据的存储,不用写sql语句。
public void save2(Person person) {
SQLiteDatabase database = sqlite.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", person.getName());
database.insert("person", null, values);
}
}
五、使用ContentProvider进行数据的存储和访问,定义一个类继承ContentProvder在这里面可以用sqlite数据库进行操作数据
package com.enterise.always.test.activity;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
public class MyContentProvider extends ContentProvider {
@Override
public boolean onCreate() {
return false;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
return null;
}
@Override
public String getType(Uri uri) {
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return 0;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
return 0;
}
}
在项目清单中
<application android:icon="@drawable/icon" android:label="@string/app_name">
<provider android:name=".MyContentProvider" android:authorities="com.enterise.always.providers.personprovider"/>
</application>
Uri的数据就是:content://com.enterise.always.provider.personprovider 后面跟的是在项目清单中定义的主机名
使用ContentResolver对ContentProvider中的数据进行添加、删除、修改和查询操作:
ContentResolver resolver = getContentResolver();
Uri uri = Uri.parse("content://cn.itcast.provider.personprovider/person");
//添加一条记录
ContentValues values = new ContentValues();
values.put("name", "itcast");
values.put("age", 25);
resolver.insert(uri, values);
//获取person表中所有记录
Cursor cursor = resolver.query(uri, null, null, null, "personid desc");
while(cursor.moveToNext()){
Log.i("ContentTest", "personid="+ cursor.getInt(0)+ ",name="+ cursor.getString(1));
}
//把id为1的记录的name字段值更改新为liming
ContentValues updateValues = new ContentValues();
updateValues.put("name", "liming");
Uri updateIdUri = ContentUris.withAppendedId(uri, 2);
resolver.update(updateIdUri, updateValues, null, null);
//删除id为2的记录
Uri deleteIdUri = ContentUris.withAppendedId(uri, 2);
resolver.delete(deleteIdUri, null, null);