首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递上下文并在服务中使用SQL

传递上下文并在服务中使用SQL
EN

Stack Overflow用户
提问于 2015-07-26 02:36:06
回答 2查看 47关注 0票数 0

我想写一些SQL到一个数据库,但是当我执行它的时候,我得到了一个空指针错误。我认为我在将上下文从WhatsApi.java传递给MessageService.java时做错了什么。(请参阅Context.MODE_PRIVATE)

这部分来自MessageService.java

代码语言:javascript
复制
db = openOrCreateDatabase("msgstore", Context.MODE_PRIVATE, null);
            db.execSQL("CREATE TABLE IF NOT EXISTS messages(`from` TEXT, `to` TEXT, message TEXT, id TEXT, t TEXT);");

这是在WhatsApi.java

代码语言:javascript
复制
MessageService msg = new MessageService();
            msg.saveMessage(mContext, "mynumber", to, message, id, time());

我建议你们也看看这个链接:

https://github.com/gi097/WhatsApi-Android/commit/3875d97458095f792c73f275648629aaaf726751

任何帮助都是非常感谢的。很抱歉可能看起来不太清楚,但我希望你们能理解。

EN

回答 2

Stack Overflow用户

发布于 2015-07-26 02:53:22

我在我的一个项目DatabaseHandler dbHandler=null;//Database handler class//global var SQLiteDatabase contactDatabase=null;// globalvar . . //some function{ if(dbHandler==null) dbHandler = new DatabaseHandler(this);//service context if(contactDatabase==null) contactDatabase=dbHandler.getWritableDatabase(); ArrayList<information>list= new ArrayList<information>(); String selectQuery = "SELECT * FROM " + DatabaseHandler.TABLE_CONTACTS; Cursor cursor = contactDatabase.rawQuery(selectQuery, null);中使用了这一点

票数 0
EN

Stack Overflow用户

发布于 2015-07-26 03:16:19

您永远不应该自己使用new关键字来实例化ActivityService。启动这些组件是安卓的责任,因为安卓还需要做一些额外的设置,包括为这些组件提供一个基本的Context。这就是为什么在你的服务类中会有一个NullPointerException。您必须实际使用startService()才能使服务正常运行。

在我看来,由于WhatsApi已经有了上下文,我看不出您有任何理由需要让服务保存数据。只需打开数据库并将数据保存在WhatsApi中。

顺便说一句,既然您正在使用SQLite,那么您确实应该使用SQLiteOpenHelper,而不是直接调用像openOrCreateDatabase()这样的方法。有关详细信息,请参阅this guide

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31629839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档