1

我对 android 很陌生,我正在尝试制作一个应用程序来记录人们在智能手机上的通信模式,并以一种有趣的方式呈现给他们。

现在我有一个在后台运行的服务,它监听拨出电话/短信和来电/短信。我想将这些数据放入数据库,然后使用数据填充界面。当有新数据放入数据库时​​,我希望界面能够反映这一点。

那么我的问题是:什么是一个好的方法呢?

有人告诉我这样做的方法是让数据库成为单例实例或将数据库包装在Content Provider中。有人可以进一步详细说明吗?

这是我的表代码

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

}}
4

2 回答 2

0

我之前对类似问题的回答可能会帮助您决定如何处理这种情况。

Android中的简单数据库访问方法

于 2013-09-25T10:48:50.710 回答
0

我的建议是为数据库操作创建一个异步任务队列,这样您就不会出错并在后台执行数据库操作并创建此队列的单例

这种方法的优点是不需要同步功能

为此,您应该实现异步任务的扩展

操作建议是否将消息发送到队列,以便队列可以执行新操作,如果需要,可以查找我的要点

https://gist.github.com/TalhaAkkas/6697962

于 2013-09-25T10:53:16.027 回答