1.在NewsContentProvider @Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
List<String> list = uri.getPathSegments();
Cursor c = null;
try {
if (list != null && list.size() > 0) {
if (list.get(0).equals("database")) {//查询数据库
if (list.size() > 1) {
database_table = list.get(1);
c = NewsDbAdapter.getInstance(getContext()).query(database_table, projection, selection, selectionArgs, null, null, sortOrder);
}
} else if (list.get(0).equals("preference_default")) {
if (list.size() > 3) {
String type = list.get(1);
if (type.equals("string")) {
String keyString = list.get(2);
String defaultValue = list.get(3);
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(NewsApplication.getInstance().getApplicationContext());
String row[] = new String[1];
row[0] = sp.getString(keyString, defaultValue);
String[] columns = new String[]{"key"};
MatrixCursor stringCursor = new MatrixCursor(columns);
stringCursor.addRow(row);
c = stringCursor;
}
}
}
else if (list.get(0).equals("preference")) {//查询preference
if (list.size() > 3) {
String type = list.get(1);
if (type.equals("string")) {
String keyString = list.get(2);
String defaultValue = list.get(3);
PersonalPreference sp = PersonalPreference.getInstance(getContext());
String row[] = new String[1];
row[0] = sp.metaPref.getString(keyString, defaultValue);
String[] columns = new String[]{"key"};
MatrixCursor stringCursor = new MatrixCursor(columns);
stringCursor.addRow(row);
c = stringCursor;
} else if (type.equals("boolean")) {
String keyString = list.get(2);
boolean defaultValue = list.get(3).equals("true") ? true : false;
PersonalPreference sp = PersonalPreference.getInstance(getContext());
String row[] = new String[1];
row[0] = sp.metaPref.getBoolean(keyString, defaultValue) ? "true" : "false";
String[] columns = new String[]{"key"};
MatrixCursor stringCursor = new MatrixCursor(columns);
stringCursor.addRow(row);
c = stringCursor;
} else if (type.equals("int")) {
String keyString = list.get(2);
int defaultValue = Integer.valueOf(list.get(3));
PersonalPreference sp = PersonalPreference.getInstance(getContext());
String row[] = new String[1];
row[0] = Integer.toString(sp.metaPref.getInt(keyString, defaultValue));
String[] columns = new String[]{"key"};
MatrixCursor stringCursor = new MatrixCursor(columns);
stringCursor.addRow(row);
c = stringCursor;
} else if (type.equals("long")) {
String keyString = list.get(2);
long defaultValue = Long.valueOf(list.get(3));
PersonalPreference sp = PersonalPreference.getInstance(getContext());
String row[] = new String[1];
row[0] = Long.toString(sp.metaPref.getLong(keyString, defaultValue));
String[] columns = new String[]{"key"};
MatrixCursor stringCursor = new MatrixCursor(columns);
stringCursor.addRow(row);
c = stringCursor;
}
}
} else if (list.get(0).equals("map")) {
String isRecom="0";
if (list.size()>1){
isRecom=list.get(1);
}
Object object=null;
if ("1".equals(isRecom)){
object =NewsDataManager.getInstance().getNewsCacheDataList();
}else {
object = NewsDataManager.getInstance().getCurrentData();
}
byte[] bytes = null;
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream oo = new ObjectOutputStream(bo);
try {
if (object!=null) {
// object to bytearray
oo.writeObject(object);
}
bytes = bo.toByteArray();
} catch (Exception e) {
System.out.println("translation" + e.getMessage());
e.printStackTrace();
} finally {
bo.close();
oo.close();
}
String[] columns = new String[]{"key"};
MatrixCursor bytesCursor = new MatrixCursor(columns);
byte[][] row = new byte[1][1];
row[0] = bytes;
bytesCursor.addRow(row);
c = bytesCursor;
}else if (list.get(0).equals("cache")){
if (list.size() > 3) {
String type = list.get(1);
if (type.equals("int")) {
String keyString = list.get(2);
if (NewsModelUtil.INewsActionAware.CACHE_CURRENT_INDEX.equals(keyString)){
String row[] = new String[1];
row[0] = Integer.toString(NewsDataManager.getInstance().getCurrentIndex());
String[] columns = new String[]{"key"};
MatrixCursor stringCursor = new MatrixCursor(columns);
stringCursor.addRow(row);
c = stringCursor;
}
}else if (type.equals("boolean")) {
String keyString = list.get(2);
if (NewsModelUtil.INewsActionAware.CACHE_KEY_IS_RECOM.equals(keyString)){
String row[] = new String[1];
row[0] = NewsDataManager.getInstance().getRecomShow() ? "true" : "false";
String[] columns = new String[]{"key"};
MatrixCursor stringCursor = new MatrixCursor(columns);
stringCursor.addRow(row);
c = stringCursor;
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
if (c != null) {
c.setNotificationUri(getContext().getContentResolver(), uri);
}
return c;
}
2.获取数据的地方
/**
* 获取sharePreference中的各种类型的值
* @param isRecom "0"-来源于频道流;“1”来源于推荐流
*/
public Object getObject(String isRecom){
Uri uri = Uri.parse("content://" + PROVIDER_NAME + "/" + TYPE_OBJ+"/"+isRecom);
Cursor cursor = contentResolver.query(uri, null, null, null, null);
byte[] bytes = null;
Object result=null;
ByteArrayInputStream bin=null;
ObjectInputStream oo=null;
try {
if (cursor != null) {
cursor.moveToNext();
bytes= cursor.getBlob(0);
}
bin= new ByteArrayInputStream(bytes);
oo = new ObjectInputStream(bin);
result= oo.readObject();
}catch (Exception e){
e.printStackTrace();
}finally {
if (bin!=null) {
try {
bin.close();
}catch (IOException e){
e.printStackTrace();
}
}
if (oo!=null){
try {
oo.close();
}catch (IOException e){
e.printStackTrace();
}
}
if(cursor != null)
cursor.close();
}
return result;
}