1 SharedPreferences存储数据


代码 调用了封装代码在


//保存值
PreferenceUtils.putBoolean(this,"key",false);
//取出 默认为ture
PreferenceUtils.getBoolean(this,"key",true);





 2 sd卡存储数据(文件存储)


权限


<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>




方法最前面要加上sd卡判断


if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//如果sd卡不可用则返回
Toast.makeText(this, "sd卡异常", Toast.LENGTH_SHORT).show();
return;
}




try {
//存
//如果没有a.txt会自动创建 加入true 会每次都追加 不加的话 则直接是新的文件 把a.txt替换掉
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "a.txt");
FileOutputStream fos = new FileOutputStream(file, true);
fos.write("这个是存储数据".getBytes());
//这个地方并没有必要调用这个刷新方法 因为close也自带close 但是要养成好习惯
fos.flush();
fos.close();
//取
FileInputStream fis = new FileInputStream(file);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fis));

String s = bufferedReader.readLine();
//这个地方会显示这个是存储数据
System.out.println(s);

fis.close();


} catch (Exception e) {
e.printStackTrace();
}




 3 SQLite数据库存储数据


传统的方式就是继承SqliteOpenHelper


class SqliteDemo extends SQLiteOpenHelper {

private static SharedPreferences sp;

public SqliteDemo(Context context) {
super(context, "数据库名字.db", null, 1);
}


@Override
public void onCreate(SQLiteDatabase db) {
//一般在这里处理建表逻辑

String strSQL = "create table "
+ "表名"
+ "(tid integer primary key autoincrement,title varchar(20),weather varchar(10),context text,publish date)";

}
//当数据库版本变化的时候会调用onUpgrade
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}

然后写DAO进行增删改查


我就随便复制一个


public class BlackDAO {
private Context context;
private BlackDbHelper mDbHelper;

public BlackDAO(Context context) {
super();
this.context = context;
mDbHelper = new BlackDbHelper(context);
}

/**
* 添加黑名单
*
* @return
*/
public boolean insert(String number, int type) {
SQLiteDatabase db = mDbHelper.getWritableDatabase();
// 添加数据
ContentValues values = new ContentValues();
values.put(BlackDbConstants.COLUMN_NUMBER, number);
values.put(BlackDbConstants.COLUMN_TYPE, type);
// 返回值 如果成功返回新数据的id 不成功返回 -1
long id = db.insert(BlackDbConstants.TABLE_NAME, null, values);
// 关闭数据库
db.close();
return id != -1;
}

/**
* 删除数据库
*
* @return
*/
public boolean delete(String number) {
SQLiteDatabase db = mDbHelper.getWritableDatabase();
// 条件语句
String whereClause = BlackDbConstants.COLUMN_NUMBER + "=?";
// 条件语句里?的值
String[] whereArgs = new String[] { number };
// 返回影响的行数
int num = db
.delete(BlackDbConstants.TABLE_NAME, whereClause, whereArgs);
// 关闭数据库
db.close();
return num > 0;
}

/**
* 更新
*
* @param newType
* 新的拦截方式
* @return
*/
public boolean update(String number, int newType) {
SQLiteDatabase db = mDbHelper.getWritableDatabase();

ContentValues values = new ContentValues();// 要更新的新数据
values.put(BlackDbConstants.COLUMN_TYPE, newType);
// 查找条件
String whereClause = BlackDbConstants.COLUMN_NUMBER + "=?";
// 条件的值
String[] whereArgs = new String[] { number };
// 参2 要更新的新数据 参3 查找条件 参4条件的值
int num = db.update(BlackDbConstants.TABLE_NAME, values, whereClause,
whereArgs);
// 关闭数据库
db.close();
return num > 0;
}

/**
* 查询全部黑名单数据
*
* @return
*/
public ArrayList<BlackInfo> queryAll() {
ArrayList<BlackInfo> infos = new ArrayList<BlackInfo>();// 存放查询的数据

SQLiteDatabase db = mDbHelper.getWritableDatabase();
// 完整的查找语句
String sql = "select " + BlackDbConstants.COLUMN_NUMBER + ","
+ BlackDbConstants.COLUMN_TYPE + " from "
+ BlackDbConstants.TABLE_NAME;
Cursor cursor = db.rawQuery(sql, null);
if (cursor != null) {
while (cursor.moveToNext()) {
String number = cursor.getString(0);
int type = cursor.getInt(1);

BlackInfo info = new BlackInfo(number, type);
infos.add(info);
}
cursor.close();
}
// 关闭数据库
db.close();
return infos;
}

/**
* 分页查询黑名单数据
* @param size 查询的数量
* @param offset 偏移量
* @return
*/
public ArrayList<BlackInfo> queryPart(int size, int offset) {
ArrayList<BlackInfo> infos = new ArrayList<BlackInfo>();// 存放查询的数据

SQLiteDatabase db = mDbHelper.getWritableDatabase();
// 完整的查找语句
String sql = "select " + BlackDbConstants.COLUMN_NUMBER + ","
+ BlackDbConstants.COLUMN_TYPE + " from "
+ BlackDbConstants.TABLE_NAME + " limit " + size + " offset "
+ offset;
Cursor cursor = db.rawQuery(sql, null);
if (cursor != null) {
while (cursor.moveToNext()) {
String number = cursor.getString(0);
int type = cursor.getInt(1);

BlackInfo info = new BlackInfo(number, type);
infos.add(info);
}
cursor.close();
}
// 关闭数据库
db.close();
return infos;
}

/**
* 查询拦截类型
*
* @param number
* 根据电话号码查询 拦截方式
* @return
*/
public int queryType(String number) {
SQLiteDatabase db = mDbHelper.getWritableDatabase();
// 完整的查找语句
String sql = "select " + BlackDbConstants.COLUMN_TYPE + " from "
+ BlackDbConstants.TABLE_NAME + " where "
+ BlackDbConstants.COLUMN_NUMBER + " =?";
// 条件的值
String[] selectionArgs = new String[] { number };
Cursor cursor = db.rawQuery(sql, selectionArgs);

int type = BlackInfo.TYPE_NONE;// 拦截方式 默认0
if (cursor != null) {
if (cursor.moveToNext()) {
type = cursor.getInt(0);
}
cursor.close();
}
// 关闭数据库
db.close();
return type;
}

}



然后就有简单的方式了 因为...上面的代码实在是很臃肿 可以使用第三方的 通过注解来增删改查


Ormlite里面也是sqlite数据库 不过使用更加方便了


 4 ContentProvider存储数据


我们写的程序一般都是要混淆打包加密的 所以 我们这个内容提供者 更多的是用来接受系统封装好的数据 而不是自己提供给外面 因为用的很少所以就不赘述了


但是我们可以从这里面获取自带的音乐


public void initData() {  
// AsyncQueryHandler asyncQueryHandler
//内容解析者
ContentResolver contentResolver = getActivity().getContentResolver();
Uri uri = Media.EXTERNAL_CONTENT_URI;
// Cursor cursor = contentResolver.query(uri, new String[]{
// Media._ID,
// Media.DATA,//文件路径
// Media.DURATION,//时长
// Media.SIZE,
// Media.TITLE, Media.ARTIST
//
//
// },null, null, null);

// Utils.printCUrrsor(cursor);
MyAsyncQueryHandler queryHandler = new MyAsyncQueryHandler(contentResolver);
//参1 异步查询 如果有不同查询 用来区分不同查询
//第二参数 cookie可以传任意对象给onQUeCO
queryHandler.startQuery(1,adapter,uri, new String[]{
Media._ID,
Media.DATA,//文件路径
Media.DURATION,//时长
Media.SIZE,
Media.TITLE,
Media.ARTIST,
Media.DISPLAY_NAME


},null, null, null);
}




 5 网络存储数据


一般是往自己的服务器传数据我就不多说了