应用本地数据库

1、创建

首先在AndroidManifest.xml 中添加

        <provider
            android:authorities="com.test.appinfo.provider" android:exported = "true"
            android:name="com.test.provider.AppInfoProvider"  >
        </provider>
package com.test.provider;

import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;

import com.xiaoxun.util.XunConstant;

/**
 * Created by zhanghaijun on 2018/11/27.
 */

public class AppInfoProvider extends ContentProvider {

    private static final String TAG = "AppInfoProvider";

    private static final String DATABASE_NAME = "XunAppInfo.db";
    private static final int DATABASE_VERSION = 1;
    private static final String TABLE_NAME = "xxappinfo";

    private SQLiteDatabase mDatabase;
    private DatabaseHelper mDatabaseHelper;

    /**
     * name : 支付宝
     * type : 1
     * app_id : com.xiaoxun.xun
     * EID : BAE73BE9E6B4BEF605CE787B8ACCD6B4
     * GID : F414F6631EB2F64D81B7916210C78660
     * optype : 0
     * icon : url//icon
     * status : 0
     * version : 1.2.8888
     * download_url : xxxx.xunkeys.com/uuu
     * wifi : 1
     * size : 1000
     * md5 : 45464454646464
     * updateTS : 20181220164734110
     */
    public static final String AUTHORITY = "com.test.appinfo.provider";
    public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/xxappinfo");
    
    private static class DatabaseHelper extends SQLiteOpenHelper {
        private Context mContext;

        public DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            mContext = context;
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL("Create table " + TABLE_NAME + "( _id INTEGER PRIMARY KEY AUTOINCREMENT,"
                    + "isSystem TEXT,"
                    + "name TEXT,"
                    + "type INTEGER,"
                    + "app_id TEXT,"
                    + "EID TEXT,"
                    + "GID TEXT,"
                    + "optype INTEGER,"
                    + "icon TEXT,"
                    + "status INTEGER,"
                    + "hidden INTEGER,"
                    + "version TEXT,"
                    + "version_code INTEGER,"
                    + "download_url TEXT,"
                    + "wifi INTEGER,"
                    + "size INTEGER,"
                    + "md5 TEXT,"
                    + "updateTS TEXT,"
                    + "version_code_new INTEGER,"
                    + "version_new TEXT,"
                    + "type_new INTEGER,"
                    + "icon_new TEXT,"
                    + "download_url_new TEXT,"
                    + "size_new INTEGER,"
                    + "md5_new TEXT,"
                    + "blank_one TEXT,"
                    + "blank_two TEXT,"
                    + "blank_three TEXT,"
                    + "blank_four TEXT,"
                    + "blank_five TEXT);");
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);
            onCreate(db);
        }

    }

    @Override
    public boolean onCreate() {
        mDatabaseHelper = new DatabaseHelper(getContext());
        return true;
    }

    @Override
    public int delete(Uri url, String selection, String[] selectionArgs) {
        mDatabase = mDatabaseHelper.getWritableDatabase();
        getContext().getContentResolver().notifyChange(url, null, false);
        return mDatabase.delete(TABLE_NAME, selection, selectionArgs);
    }

    @Override
    public String getType(Uri url) {
        return null;
    }

    @Override
    public Uri insert(Uri url, ContentValues initialValues) {
        mDatabase = mDatabaseHelper.getWritableDatabase();
        ContentValues values = new ContentValues(initialValues);
        long rowId = mDatabase.insert(TABLE_NAME, null, values);
        if (rowId > 0) {
            Uri rowUri = ContentUris.appendId(CONTENT_URI.buildUpon(), rowId).build();
            getContext().getContentResolver().notifyChange(url, null, false);
            return rowUri;
        }
        throw new SQLException("jxring: Failed to insert row into " + url);
    }

    @Override
    public Cursor query(Uri url, String[] projection, String selection, String[] selectionArgs,
                        String sortOrder) {
        SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
        SQLiteDatabase db = mDatabaseHelper.getWritableDatabase();
        qb.setTables(TABLE_NAME);

        Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, sortOrder);
        if (c != null) {
            c.setNotificationUri(getContext().getContentResolver(), url);
        }
        return c;
    }

    @Override
    public int update(Uri url, ContentValues initialValues, String where, String[] whereArgs) {
        mDatabase = mDatabaseHelper.getWritableDatabase();
        ContentValues values = new ContentValues(initialValues);
        getContext().getContentResolver().notifyChange(url, null, false);
        return mDatabase.update(TABLE_NAME, values, where, whereArgs);
    }
}

2、使用

    public static final String AUTHORITY = "com.test.appinfo.provider";
    public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/xxappinfo");


//写入

    public void insertData_SystemAPk() {
        String[] mAppIds = LauncherApplication.getInstance().getResources().getStringArray(R.array.appstor_applists);
        String[] mappNames = LauncherApplication.getInstance().getResources().getStringArray(R.array.appstor_applists_name);
        String need_hiden = Settings.System.getString(LauncherApplication.getInstance().getContentResolver(), "XunAppHiden");
        if (need_hiden == null) need_hiden = "";

        try {
            ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
            for (int i = 0; i < mAppIds.length; i++) {
                if (!mAppIds[i].equals("ado.install.xiaoxun.com.xiaoxuninstallapk")) {
                    if (!mAppIds[i].equals("com.xxun.pointsystem")) {
                        ops.add(ContentProviderOperation.newInsert(XunConstant.CONTENT_URI)
                                .withValue(XunConstant.NAME, mappNames[i])
                                .withValue(XunConstant.TYPE, 2)
                                .withValue(XunConstant.APP_ID, mAppIds[i])
                                .withValue(XunConstant.ICON, mAppIds[i])
                                .withValue(XunConstant.STATUS, 0)
                                .withValue(XunConstant.HIDDEN, need_hiden.contains(mAppIds[i]) ? 1 : 0)
                                .withYieldAllowed(true)
                                .build());
                        Log.d("zhj", "mappNames[i] = " + i + ",   name =" + mappNames[i]);
                    }
                }
            }
            LauncherApplication.getInstance().getContentResolver().applyBatch(XunConstant.AUTHORITY, ops);
        } catch (RemoteException reception) {

        } catch (OperationApplicationException oaeception) {

        }
    }

//查询
    public static  List<ListBean> queryNeedUpdateApk(Context mcontext){
        List<ListBean> mlist = null;
        Cursor mcursor = mcontext.getContentResolver().query(XunConstant.CONTENT_URI,new String[]{
                 XunConstant.EID
                ,XunConstant.WIFI
                ,XunConstant.GID
                ,XunConstant.TYPE
                ,XunConstant.HIDDEN
                ,XunConstant.ICON
                ,XunConstant.VERSION_CODE
                ,XunConstant.VERSION
                ,XunConstant.OPTYPE
                ,XunConstant.SIZE
                ,XunConstant.DOWNLOAD_URL
                ,XunConstant.NAME
                ,XunConstant.APP_ID
                ,XunConstant.STATUS
                ,XunConstant.MD5
                ,XunConstant.ATTR
        },XunConstant.STATUS+"=? ",new String[]{"2"},null);
        if(mcursor != null){
            mlist = new ArrayList<>();
            while (mcursor.moveToNext()){
                ListBean mPl = new ListBean();
                mPl.EID = mcursor.getString(mcursor.getColumnIndex(XunConstant.EID));
                mPl.wifi = mcursor.getInt(mcursor.getColumnIndex(XunConstant.WIFI));
                mPl.GID = mcursor.getString(mcursor.getColumnIndex(XunConstant.GID));
                mPl.type = mcursor.getInt(mcursor.getColumnIndex(XunConstant.TYPE));
                mPl.hidden = mcursor.getInt(mcursor.getColumnIndex(XunConstant.HIDDEN));
                mPl.icon = mcursor.getString(mcursor.getColumnIndex(XunConstant.ICON));
                mPl.version_code = mcursor.getInt(mcursor.getColumnIndex(XunConstant.VERSION_CODE));
                mPl.version = mcursor.getString(mcursor.getColumnIndex(XunConstant.VERSION));
                mPl.optype = 1;//mcursor.getInt(mcursor.getColumnIndex(XunConstant.OPTYPE));//0:add 1:modify 2:delete
                mPl.size = mcursor.getInt(mcursor.getColumnIndex(XunConstant.SIZE));
                mPl.downloadUrl = mcursor.getString(mcursor.getColumnIndex(XunConstant.DOWNLOAD_URL));
                mPl.name = mcursor.getString(mcursor.getColumnIndex(XunConstant.NAME));
                mPl.appId = mcursor.getString(mcursor.getColumnIndex(XunConstant.APP_ID));
                mPl.status = mcursor.getInt(mcursor.getColumnIndex(XunConstant.STATUS));
                mPl.md5 = mcursor.getString(mcursor.getColumnIndex(XunConstant.MD5));
                mPl.attr = mcursor.getString(mcursor.getColumnIndex(XunConstant.ATTR));
                mlist.add(mPl);
            }
        }
        return mlist;
    }

    public static  PLBeanX getPLBeanX(String app_id,Context mcontext,int optype){
        PLBeanX mPl = null;
        Cursor mcursor =  mcontext.getContentResolver().query(XunConstant.CONTENT_URI,new String[]{
                 XunConstant.EID
                ,XunConstant.WIFI
                ,XunConstant.GID
                ,XunConstant.TYPE
                ,XunConstant.HIDDEN
                ,XunConstant.ICON
                ,XunConstant.VERSION_CODE
                ,XunConstant.VERSION
                ,XunConstant.OPTYPE
                ,XunConstant.SIZE
                ,XunConstant.DOWNLOAD_URL
                ,XunConstant.NAME
                ,XunConstant.APP_ID
                ,XunConstant.STATUS
                ,XunConstant.MD5
                ,XunConstant.ATTR
        },XunConstant.APP_ID+" =?",new String[]{app_id+""},null);
        if(mcursor != null){
            while(mcursor.moveToNext()){
                mPl = new PLBeanX();
                mPl.EID = mcursor.getString(mcursor.getColumnIndex(XunConstant.EID));
                mPl.wifi = mcursor.getInt(mcursor.getColumnIndex(XunConstant.WIFI));
                mPl.GID = mcursor.getString(mcursor.getColumnIndex(XunConstant.GID));
                mPl.type = mcursor.getInt(mcursor.getColumnIndex(XunConstant.TYPE));
                mPl.hidden = mcursor.getInt(mcursor.getColumnIndex(XunConstant.HIDDEN));
                mPl.icon = mcursor.getString(mcursor.getColumnIndex(XunConstant.ICON));
                mPl.versionCode = mcursor.getInt(mcursor.getColumnIndex(XunConstant.VERSION_CODE));
                mPl.version = mcursor.getString(mcursor.getColumnIndex(XunConstant.VERSION));
                mPl.optype = optype;//mcursor.getString(mcursor.getColumnIndex(XunConstant.OPTYPE));//0:add 1:modify 2:delete
                mPl.size = mcursor.getInt(mcursor.getColumnIndex(XunConstant.SIZE));
                mPl.downloadUrl = mcursor.getString(mcursor.getColumnIndex(XunConstant.DOWNLOAD_URL));
                mPl.name = mcursor.getString(mcursor.getColumnIndex(XunConstant.NAME));
                mPl.appId = mcursor.getString(mcursor.getColumnIndex(XunConstant.APP_ID));
                mPl.status = mcursor.getInt(mcursor.getColumnIndex(XunConstant.STATUS));
                mPl.md5 = mcursor.getString(mcursor.getColumnIndex(XunConstant.MD5));
                mPl.attr = mcursor.getString(mcursor.getColumnIndex(XunConstant.ATTR));
            }
            mcursor.close();
        }
        return mPl;
    }

//更新
    //更新一条数据库数据
    public static  void AppstoreUpdate(ListBeanXX deal,Context context){
        if(!isHasData(deal.appId,context)){
                AppstoreInsert(deal,context);
                return;   
        }
        try{
            ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
            ops.add(ContentProviderOperation.newUpdate(XunConstant.CONTENT_URI)
                        .withSelection(XunConstant.APP_ID+" =?",new String[]{deal.appId+""})
                        .withValue(XunConstant.NAME, deal.name)
                        .withValue(XunConstant.TYPE, deal.type)
                        .withValue(XunConstant.APP_ID, deal.appId)
                        .withValue(XunConstant.EID, deal.EID)
                        .withValue(XunConstant.GID, deal.GID)
                        .withValue(XunConstant.OPTYPE, deal.optype)
                        .withValue(XunConstant.ICON, deal.icon)
                        .withValue(XunConstant.STATUS, deal.status)
                        .withValue(XunConstant.HIDDEN, deal.hidden)
                        .withValue(XunConstant.VERSION, deal.version)
                        .withValue(XunConstant.VERSION_CODE, deal.version_code)
                        .withValue(XunConstant.DOWNLOAD_URL, deal.downloadUrl)
                        .withValue(XunConstant.WIFI, deal.wifi)
                        .withValue(XunConstant.SIZE, deal.size)
                        .withValue(XunConstant.MD5, deal.md5)
                        .withValue(XunConstant.UPDATES, deal.updateTS)
                        .withValue(XunConstant.ATTR, deal.attr)
                        .withYieldAllowed(true)
                        .build());
            context.getContentResolver().applyBatch(XunConstant.AUTHORITY, ops);
        }catch(RemoteException reception){

        }catch(OperationApplicationException oaeception){

        }
    }

    public static void AppstoreInsert(ListBeanXX deal,Context context){
        if(isHasData(deal.appId,context)){
                AppstoreUpdate(deal,context);
                return;   
        }
        try{
            ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
            ops.add(ContentProviderOperation.newInsert(XunConstant.CONTENT_URI)
                        .withValue(XunConstant.NAME, deal.name)
                        .withValue(XunConstant.TYPE, deal.type)
                        .withValue(XunConstant.APP_ID, deal.appId)
                        .withValue(XunConstant.EID, deal.EID)
                        .withValue(XunConstant.GID, deal.GID)
                        .withValue(XunConstant.OPTYPE, deal.optype)
                        .withValue(XunConstant.ICON, deal.icon)
                        .withValue(XunConstant.STATUS, deal.status)
                        .withValue(XunConstant.HIDDEN, deal.hidden)
                        .withValue(XunConstant.VERSION, deal.version)
                        .withValue(XunConstant.VERSION_CODE, deal.version_code)
                        .withValue(XunConstant.DOWNLOAD_URL, deal.downloadUrl)
                        .withValue(XunConstant.WIFI, deal.wifi)
                        .withValue(XunConstant.SIZE, deal.size)
                        .withValue(XunConstant.MD5, deal.md5)
                        .withValue(XunConstant.ATTR, deal.attr)
                        .withValue(XunConstant.UPDATES, deal.updateTS)
                        .withYieldAllowed(true)
                        .build());
            context.getContentResolver().applyBatch(XunConstant.AUTHORITY, ops);
        }catch(RemoteException reception){

        }catch(OperationApplicationException oaeception){

        }
    }

3、实体类

package com.test.xiaoxuninstallapk;

import android.net.Uri;

/**
 * Created by 张海军on 2018/12/27.
 */

public class XunConstant {
    public static final String ISSYSTEM = "isSystem";
    public static final String NAME = "name";
    public static final String TYPE = "type";
    public static final String APP_ID = "app_id";
    public static final String EID = "EID";
    public static final String GID = "GID";
    public static final String OPTYPE = "optype";
    public static final String ICON = "icon";
    public static final String STATUS = "status";
    public static final String HIDDEN = "hidden";
    public static final String VERSION = "version";
    public static final String VERSION_CODE = "version_code";
    public static final String DOWNLOAD_URL = "download_url";
    public static final String WIFI = "wifi";
    public static final String SIZE = "size";
    public static final String MD5 = "md5";
    public static final String UPDATES = "updateTS";

    public static final String VERSION_CODE_NEW = "version_code_new";
    public static final String VERSION_NEW = "version_new";
    public static final String TYPE_NEW = "type_new";
    public static final String ICON_NEW = "icon_new";
    public static final String DOWNLOAD_URL_NEW = "download_url_new";
    public static final String SIZE_NEW = "size_new";
    public static final String MD5_NEW = "md5_new";

    public static final String AUTHORITY = "com.xiaoxun.appinfo.provider";
    public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/xxappinfo");
    
    public static final String XUN_INSERTDATABASE_INIT_ACTION = "com.xiaoxun.init.getsystem.app";
    public static final String XUN_UPLOAD_SYS_APP_TO_SERVER = "com.xiaoxun.upload.system.toserver";
    
    public static final String XUN_UPLOAD_UPDATE_SOME_STATES = "com.xiaoxun.upload.some.states";
    public static final String XUN_APPSTORE_REMOVE_APP_BRO = "com.xiaoxun.uninstall.app";
    public static final String XUN_APPSTORE_UPDATE_LOCAL = "com.xiaoxun.update.local.database";
}

package com.xiaoxun.bean;

import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;

import org.json.JSONException;
import org.json.JSONObject;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by zhanghaijun on 2018/12/17.
 */
public class ListBeanXX {
    /**
     * EID : BAE73BE9E6B4BEF605CE787B8ACCD6B4
     * wifi : 1
     * GID : F414F6631EB2F64D81B7916210C78660
     * icon : url//icon
     * type : 1
     * version : 1.2.8888
     * optype : 0
     * size : 1000
     * name : 支付宝
     * download_url : xxxx.xunkeys.com/uuu
     * app_id : com.xiaoxun.xun
     * status : 0
     * updateTS : 20181220164734110
     * md5 : 45464454646464
     */

    @SerializedName("EID")
    public String EID;
    @SerializedName("wifi")
    public int wifi;
    @SerializedName("GID")
    public String GID;
    @SerializedName("icon")
    public String icon;
    @SerializedName("type")
    public int type;
    @SerializedName("version")
    public String version;
    @SerializedName("version_code")
    public int version_code;
    @SerializedName("hidden")
    public int hidden;
    @SerializedName("optype")
    public int optype;
    @SerializedName("size")
    public int size;
    @SerializedName("name")
    public String name;
    @SerializedName("download_url")
    public String downloadUrl;
    @SerializedName("app_id")
    public String appId;
    @SerializedName("status")
    public int status;
    @SerializedName("updateTS")
    public String updateTS;
    @SerializedName("md5")
    public String md5;
    @SerializedName("attr")
    public String attr;

    public static ListBeanXX objectFromData(String str) {

        return new Gson().fromJson(str, ListBeanXX.class);
    }

    public static ListBeanXX objectFromData(String str, String key) {

        try {
            JSONObject jsonObject = new JSONObject(str);

            return new Gson().fromJson(jsonObject.getString(str), ListBeanXX.class);
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }

    public static List<ListBeanXX> arrayListBeanXXFromData(String str) {

        Type listType = new TypeToken<ArrayList<ListBeanXX>>() {
        }.getType();

        return new Gson().fromJson(str, listType);
    }

    public static List<ListBeanXX> arrayListBeanXXFromData(String str, String key) {

        try {
            JSONObject jsonObject = new JSONObject(str);
            Type listType = new TypeToken<ArrayList<ListBeanXX>>() {
            }.getType();

            return new Gson().fromJson(jsonObject.getString(str), listType);

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

        return new ArrayList();


    }
}

转载请标明出处:  https://blog.csdn.net/hj_key/article/details/103453136

猜你喜欢

转载自blog.csdn.net/hj_key/article/details/103453136