代码如下:
/**
* Created by SongWei on 2017/3/14.
* Only used in Debug build type, make sure which build type the client is.
*/
public class PushReceivedCollector {
private static final String TAG = "PushReceivedCollector";
private static final String TABLE_PUSH_ITEM = "push_item";
private static final String DB_NAME = "push_received.db";
private static PushOpenHelper pushOpenHelper;
private static synchronized PushOpenHelper getHelper(Context c) {
if (pushOpenHelper == null) {
pushOpenHelper = new PushOpenHelper(c);
}
return pushOpenHelper;
}
private static class PushOpenHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 2;
private PushOpenHelper(Context context) {
super(context, DB_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
createPushItemTable(db);
//TODO:Add More Table Here
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//TODO:Update Database Here
switch (oldVersion) {
case 1:
addSavedColumnInPushItemTable(db);
ZLog.d(TAG, "push_received.db updated from oldVersion: " + oldVersion + " to newVersion:" + newVersion);
break;
default:
break;
}
}
}
static void createPushItemTable(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_PUSH_ITEM + "("
+ DataContract.PushItemsColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ DataContract.PushItemsColumns.TASK_ID + " TEXT,"
+ DataContract.PushItemsColumns.PUSH_TYPE + " INTEGER,"
+ DataContract.PushItemsColumns.TIMESTAMP + " INTEGER,"
+ DataContract.PushItemsColumns.CONFIG + " TEXT,"
+ DataContract.PushItemsColumns.STATUS + " INTEGER,"
+ DataContract.PushItemsColumns.RETRIES + " INTEGER,"
+ DataContract.PushItemsColumns.SAVED + " INTEGER" //1:true, 0:false
+ ");");
}
private static void addSavedColumnInPushItemTable(SQLiteDatabase db) {
db.execSQL("ALTER TABLE " + TABLE_PUSH_ITEM + " ADD COLUMN " + DataContract.PushItemsColumns.SAVED + " INTEGER default 1");
}
//main entry
public static boolean insertPushItem(final Context c, final PushItem item, boolean saved) {
if (null == c || null == item) {
return false;
}
ContentValues cv = new ContentValues(7);
cv.put(DataContract.PushItemsColumns.TASK_ID, item.getTaskId() == null ? "" : item.getTaskId());
cv.put(DataContract.PushItemsColumns.PUSH_TYPE, item.getPushType().value);
cv.put(DataContract.PushItemsColumns.TIMESTAMP, item.getTimestamp());
cv.put(DataContract.PushItemsColumns.CONFIG, item.getConfig() == null ? "" : item.getConfig());
cv.put(DataContract.PushItemsColumns.STATUS, item.getStatus().value);
cv.put(DataContract.PushItemsColumns.RETRIES, item.getRetries());
cv.put(DataContract.PushItemsColumns.SAVED, saved ? "1" : "0");
Cursor cursor = null;
try {
SQLiteDatabase db = getHelper(c).getWritableDatabase();
long last_id = db.insert(TABLE_PUSH_ITEM, null, cv);
cursor = db.query(TABLE_PUSH_ITEM, null, null, null, null, null, null);
if (cursor != null && cursor.getCount() > 200) {
db.delete(TABLE_PUSH_ITEM, DataContract.PushItemsColumns._ID + " < ?", new String[]{String.valueOf(last_id - 100)});
}
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
IOUtils.closeQuietly(cursor);
}
return true;
}
public static List<DebugPushItem> queryAll(final Context c) {
ArrayList<DebugPushItem> debugPushItems = new ArrayList<>();
Cursor cursor = null;
try {
cursor = getHelper(c).getWritableDatabase().query(TABLE_PUSH_ITEM,
null,
null,
null,
null,
null,
DataContract.PushItemsColumns._ID + " DESC");
if (cursor != null) {
while (cursor.moveToNext()) {
String taskId = cursor.getString(cursor.getColumnIndex(DataContract.PushItemsColumns.TASK_ID));
int pushType = cursor.getInt(cursor.getColumnIndex(DataContract.PushItemsColumns.PUSH_TYPE));
long timestamp = cursor.getLong(cursor.getColumnIndex(DataContract.PushItemsColumns.TIMESTAMP));
String config = cursor.getString(cursor.getColumnIndex(DataContract.PushItemsColumns.CONFIG));
int status = cursor.getInt(cursor.getColumnIndex(DataContract.PushItemsColumns.STATUS));
int retries = cursor.getInt(cursor.getColumnIndex(DataContract.PushItemsColumns.RETRIES));
boolean saved = cursor.getInt(cursor.getColumnIndex(DataContract.PushItemsColumns.SAVED)) == 1;
DebugPushItem item = new DebugPushItem(taskId, pushType, timestamp, config, status, retries, saved);
debugPushItems.add(item);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(cursor);
}
return debugPushItems;
}
private static PushStatus getStatusByValue(int value) {
switch (value) {
case 0:
return PushStatus.INIT;
case 1:
return PushStatus.ON_GOING;
case 2:
return PushStatus.DONE;
default:
return PushStatus.INIT;
}
}
public static class DebugPushItem {
public PushItem pushItem;
public boolean saved;
DebugPushItem(String taskId, int pushType, long timestamp, String config, int status, int retries, boolean saved) {
this.pushItem = new PushItem();
this.pushItem.setTaskId(taskId);
this.pushItem.setPushType(PushType.valueOf(pushType));
this.pushItem.setTimestamp(timestamp);
this.pushItem.setConfig(config);
this.pushItem.setStatus(getStatusByValue(status));
this.pushItem.setRetries(retries);
this.saved = saved;
}
}
}