传递Context并在服务中使用SQL

时间:2015-07-25 18:36:06

标签: java android sql

我想将一些SQL写入数据库,但是在执行时我得到一个nullpointer错误。我认为将上传从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

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

2 个答案:

答案 0 :(得分:0)

我在我的一个项目中使用它 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);

答案 1 :(得分:0)

您不应该使用Activity关键字自己实例化Servicenew。启动这些组件是Android的责任,因为Android还需要进行一些额外的设置,包括为这些组件提供基础Context。这就是您在服务类中获得NullPointerException的原因。您必须实际使用startService()才能使服务正常运行。

在我看来,由于WhatsApi已经有了一个上下文,我认为没有理由需要让服务保存数据。只需打开数据库并将数据保存在WhatsApi

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