【问题标题】:Why i can not open sqlite database in android service?为什么我无法在 android 服务中打开 sqlite 数据库?
【发布时间】:2015-11-07 15:06:22
【问题描述】:

我是 android 初学者,想在 android 服务中打开 sqlite 数据库:
写下这段代码:

public class MyService extends Service {

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        try {

                SQLiteDatabase db;
                db = SQLiteDatabase.openOrCreateDatabase(DATABASE_NAME, this.MODE_PRIVATE, null);
    }catch(Exception e){
    }

        return Service.START_FLAG_REDELIVERY;
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

}


但在这一行:

db = SQLiteDatabase.openOrCreateDatabase(DATABASE_NAME, this.MODE_PRIVATE, null);


我收到此错误:


发生了什么?我该如何解决?谢谢。

【问题讨论】:

标签: android


【解决方案1】:

正如错误所说,MODE_PRIVATE 是静态的,您正在尝试使用Context 的实例(在您的情况下为this,因为ServiceContext 的子类)来访问它。

您可以在the documentation 中看到 MODE_PRIVATE 是静态的:

public static final int MODE_PRIVATE

像这样更改您的代码:

db = this.openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null);

我建议你看看 Java™ 教程中的 Understanding Class Members

另外,考虑到 @pskink 的 cmets 并阅读 Context 类中 openOrCreateDatabase 方法的 the documentation

【讨论】:

  • SQLiteDatabase.openOrCreateDatabase 没有任何int 参数,请阅读文档
  • @pskink 你是对的,我试图指出如何解决捕获中显示的错误,但我没有查看该行的其余部分。感谢您指出这一点。
  • @user3671271 当然你可以从Service 读取sqlite 数据库,因为Service 扩展Context
猜你喜欢
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
  • 2016-06-22
相关资源
最近更新 更多