我对Android很新,我正在尝试制作一个应用程序,在智能手机上记录人们的通信模式,并以有趣的方式呈现给他们。
现在我有一个在后台运行的服务,用于侦听传出呼叫/文本和传入呼叫/文本。我想将这些数据放入数据库,然后使用数据填充接口。当新数据被放入数据库时,我希望界面能够反映出来。
我的问题是:对此有什么好处?
有人告诉我,这样做的方法是让数据库成为单例实例或将数据库包装在内容提供商中。有人能够进一步阐述这一点吗?
这是我的表格代码
public class LogTable {
//Database name and Version
public static final String DATABASE_NAME = "logs.db";
public static final int DATABASE_VERSION = 1;
//Database Table
public static final String TABLE_NAME = "logs";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_PHONENUMBER = "phonenumber";
public static final String COLUMN_TYPE = "type";
public static final String COLUMN_DATE = "date";
public static final String COLUMN_INCOMING = "incoming";
public static final String COLUMN_OUTGOING = "outgoing";
//Preventing someone from accidentally instantiating the class
//Giving it an empty constructor
public LogTable(){}
//Database creation SQL statement
public static final String DATABASE_CREATE = "CREATE TABLE "
+ TABLE_NAME + "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ COLUMN_PHONENUMBER + " TEXT, "
+ COLUMN_TYPE + " TEXT, "
+ COLUMN_DATE + " INTEGER, "
+ COLUMN_INCOMING + " INTEGER, "
+ COLUMN_OUTGOING + " INTEGER + );";}
这是我的MySQliteHelper的代码
public class MySQLiteHelper extends SQLiteOpenHelper {
//Constructor
public MySQLiteHelper(Context ctx)
{
super(ctx, LogTable.DATABASE_NAME, null, LogTable.DATABASE_VERSION);
}
@Override
//Method called during creation of the database
public void onCreate(SQLiteDatabase database) {
database.execSQL(LogTable.DATABASE_CREATE);
Log.i("SQL", "Database Created");
}
@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
database.execSQL("DROP TABLE IF EXISTS " + LogTable.TABLE_NAME);
}}
答案 0 :(得分:0)
我之前对类似问题的回答可以帮助您决定如何处理这种情况。
答案 1 :(得分:0)
我的建议是你为数据库操作创建一个异步任务队列,这样你就不会得到错误并在后台进行数据库操作并创建这个队列的单例
这种方法的优点是不需要同步功能
为此,您应该实现异步任务的扩展
操作建议是将消息发送到队列,以便队列可以执行新操作 如果你愿意,你可以寻找我的要点