我想写一些SQL到一个数据库,但是当我执行它的时候,我得到了一个空指针错误。我认为我在将上下文从WhatsApi.java传递给MessageService.java时做错了什么。(请参阅Context.MODE_PRIVATE)
这部分来自MessageService.java
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中
MessageService msg = new MessageService();
msg.saveMessage(mContext, "mynumber", to, message, id, time());我建议你们也看看这个链接:
https://github.com/gi097/WhatsApi-Android/commit/3875d97458095f792c73f275648629aaaf726751
任何帮助都是非常感谢的。很抱歉可能看起来不太清楚,但我希望你们能理解。
发布于 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);中使用了这一点
发布于 2015-07-26 03:16:19
您永远不应该自己使用new关键字来实例化Activity或Service。启动这些组件是安卓的责任,因为安卓还需要做一些额外的设置,包括为这些组件提供一个基本的Context。这就是为什么在你的服务类中会有一个NullPointerException。您必须实际使用startService()才能使服务正常运行。
在我看来,由于WhatsApi已经有了上下文,我看不出您有任何理由需要让服务保存数据。只需打开数据库并将数据保存在WhatsApi中。
顺便说一句,既然您正在使用SQLite,那么您确实应该使用SQLiteOpenHelper,而不是直接调用像openOrCreateDatabase()这样的方法。有关详细信息,请参阅this guide。
https://stackoverflow.com/questions/31629839
复制相似问题