通过ContentProvider读取对象

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值