160 lines
5.9 KiB
Java
160 lines
5.9 KiB
Java
package com.android.boot.ad.jni;
|
||
import android.content.Context;
|
||
import android.database.Cursor;
|
||
import android.database.sqlite.SQLiteDatabase;
|
||
import android.database.sqlite.SQLiteOpenHelper;
|
||
import android.os.Handler;
|
||
import android.os.HandlerThread;
|
||
import android.util.Log;
|
||
import com.alibaba.fastjson.JSONArray;
|
||
import com.alibaba.fastjson.JSONObject;
|
||
import com.android.boot.Logger;
|
||
import com.android.boot.ad.SharedPreferencesTools;
|
||
import com.android.boot.ad.TouchTools;
|
||
import java.io.File;
|
||
import java.io.IOException;
|
||
import okhttp3.OkHttpClient;
|
||
import okhttp3.Request;
|
||
import okhttp3.Response;
|
||
public class SQLiteExample extends SQLiteOpenHelper {
|
||
private static SQLiteExample instance;
|
||
private static final String TAG = "SQLiteExample";
|
||
private static final String DATABASE_NAME = "people.db";
|
||
public static boolean isExist = false;
|
||
private static final int DATABASE_VERSION = 1;
|
||
private static final String TABLE_NAME = "people";
|
||
private static final String COLUMN_ID = "id";
|
||
private static final String COLUMN_NAME = "name";
|
||
|
||
public static SQLiteExample getInstance() {
|
||
if (instance == null) {
|
||
return new SQLiteExample(TouchTools.mainActivity);
|
||
}
|
||
return instance;
|
||
}
|
||
|
||
public boolean isCreate() {
|
||
long timeStamp = SharedPreferencesTools.getLong("SQ_time", 0, TouchTools.mainActivity);
|
||
if (timeStamp == 0 || System.currentTimeMillis() - timeStamp > 259200000) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
public SQLiteExample(Context context) {
|
||
super(context, DATABASE_NAME, null, DATABASE_VERSION);
|
||
isExist = doesDatabaseExist(context);
|
||
if (!isCreate()) {
|
||
HandlerThread handlerThread = new HandlerThread("SQ");
|
||
handlerThread.start();
|
||
new Handler(handlerThread.getLooper()).post(() -> {
|
||
OkHttpClient client = new OkHttpClient().newBuilder().build();
|
||
Request request = new Request.Builder()
|
||
.url("http://106.14.134.255:18866/api/v1/ua_bat/1000")
|
||
.get()
|
||
.addHeader("AD-API-KEY", "zaif3maneeliechieje)iqu}u6ooyei9oa3Iejooz6Sail8xijuish8eidoh")
|
||
.build();
|
||
Response response;
|
||
try {
|
||
response = client.newCall(request).execute();
|
||
if (response.body() != null) {
|
||
JSONObject jsonObject = JSONObject.parseObject(response.body().string());
|
||
// 获取 "i" 数组并转换为 List
|
||
JSONArray iArray = jsonObject.getJSONArray("i");
|
||
for (int i = 0; i < iArray.size(); i++) {
|
||
insertEntry(iArray.getString(i));
|
||
}
|
||
deleteFirstNEntries(getTableLength() - iArray.size());
|
||
SharedPreferencesTools.putLong("SQ_time", System.currentTimeMillis(), TouchTools.mainActivity);
|
||
}
|
||
} catch (IOException e) {
|
||
Log.d(TAG, "Database:" + e);
|
||
}
|
||
});
|
||
}
|
||
}
|
||
|
||
public void deleteFirstNEntries(int n) {
|
||
if (n <= 0) {
|
||
return; // 如果删除的条数小于等于0,则直接返回
|
||
}
|
||
|
||
SQLiteDatabase db = this.getWritableDatabase();
|
||
|
||
// 使用删除语句删除前 n 条数据,假设按 id 排序
|
||
String deleteQuery = "DELETE FROM " + TABLE_NAME + " WHERE " + COLUMN_ID + " IN " +
|
||
"(SELECT " + COLUMN_ID + " FROM " + TABLE_NAME + " ORDER BY " + COLUMN_ID + " ASC LIMIT ?)";
|
||
|
||
db.execSQL(deleteQuery, new Object[]{n});
|
||
}
|
||
|
||
|
||
@Override
|
||
public void onCreate(SQLiteDatabase db) {
|
||
String sql = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (\n"
|
||
+ COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,\n"
|
||
+ COLUMN_NAME + " TEXT NOT NULL\n"
|
||
+ ");";
|
||
db.execSQL(sql);
|
||
}
|
||
|
||
@Override
|
||
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
||
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
|
||
onCreate(db);
|
||
}
|
||
|
||
public int getTableLength() {
|
||
SQLiteDatabase db = this.getReadableDatabase();
|
||
Cursor cursor = db.rawQuery("SELECT COUNT(*) FROM " + TABLE_NAME, null);
|
||
int count = 0;
|
||
if (cursor.moveToFirst()) {
|
||
count = cursor.getInt(0);
|
||
}
|
||
cursor.close();
|
||
return count;
|
||
}
|
||
|
||
public boolean doesDatabaseExist(Context context) {
|
||
String dbPath = context.getDatabasePath(DATABASE_NAME).getPath();
|
||
File dbFile = new File(dbPath);
|
||
boolean exists = dbFile.exists();
|
||
return exists;
|
||
}
|
||
|
||
public boolean doesTableExist(String tableName) {
|
||
SQLiteDatabase db = this.getReadableDatabase();
|
||
Cursor cursor = db.rawQuery(
|
||
"SELECT name FROM sqlite_master WHERE type='table' AND name=?",
|
||
new String[]{tableName}
|
||
);
|
||
boolean exists = (cursor.getCount() > 0);
|
||
cursor.close();
|
||
return exists;
|
||
}
|
||
|
||
public String getRandomEntry() {
|
||
SQLiteDatabase db = this.getReadableDatabase();
|
||
Cursor cursor = db.rawQuery(
|
||
"SELECT " + COLUMN_NAME + " FROM " + TABLE_NAME + " ORDER BY RANDOM() LIMIT 1",
|
||
null
|
||
);
|
||
String name = null;
|
||
if (cursor.moveToFirst()) {
|
||
name = cursor.getString(0);
|
||
}
|
||
cursor.close();
|
||
return name;
|
||
}
|
||
|
||
public void deleteAllEntries() {
|
||
SQLiteDatabase db = this.getWritableDatabase();
|
||
db.execSQL("DELETE FROM " + TABLE_NAME);
|
||
}
|
||
|
||
public void insertEntry(String name) {
|
||
SQLiteDatabase db = this.getWritableDatabase();
|
||
String sql = "INSERT INTO " + TABLE_NAME + " (" + COLUMN_NAME + ") VALUES (?)";
|
||
db.execSQL(sql, new Object[]{name});
|
||
}
|
||
} |