从线程访问sqlite db

时间:2012-07-31 23:40:46

标签: android multithreading android-sqlite

已设置存储适配器(Contextual)以帮助创建和管理单个数据库和表。尝试从新线程访问该表以读取记录并在后台通过HTTP传输它们。对数据库的其他访问是基于活动的,仅插入。虽然数据很小,但线程可能会根据可能的记录数运行几秒钟。无需与UI进行通信。

StorageAdapter类(SQL Lite设置)

private static SQLiteDatabase db;
private Context context;
private StorageOpenHelper dbHelper;

public StorageAdapter(Context _context) {
  this.context = _context;
  dbHelper = new StorageOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
}

以下主题的错误消息是:“构造函数StorageAdapter(Worker)未定义”

以下是主题:

public void run () {
  // Does Storage Adapter need to be runnable           
  // Read DB ID's of committed (1) records into array
  **StorageAdapter storageAdapter = new StorageAdapter(this);**
  storageAdapter.open();
  cursor = storageAdapter.queueCommID();
  int i = 0;
  int currcnt = cursor.getCount();
  if (cursor.getPosition() == -1) cursor.moveToFirst();
  while (i < currcnt) {
    // Send single record to server
    sendrec(cursor);
i=i+1;
cursor.moveToNext();
  }
  storageAdapter.close();
  stop();
};

当然希望我没有让所有人感到困惑。一直在追我的尾巴,我很困惑。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

似乎是在Worker实例中创建StorageAdapter实例。这意味着 this 引用了Worker而不是Context。如果您的工作人员是匿名课程,您可以使用 MyActivity.this 之类的内容,而不仅仅是