簡體   English   中英

在BroadCastReceiver類中未定義的構造方法

[英]Constructor undefined in a BroadCastReceiver class

從服務器收到gcm消息時,我試圖將數據從遠程服務器插入本地數據庫。 我創建了一個數據庫控制器類和broadcastreceiver類。

數據庫控制器類

public class DBController  extends SQLiteOpenHelper {

    public DBController(Context applicationcontext) {
        super(applicationcontext, "user.db", null, 1);
    }
    //Creates Table
    @Override
    public void onCreate(SQLiteDatabase database) {
        String query;
        query = "CREATE TABLE users ( userId INTEGER, userName TEXT)";
        database.execSQL(query);
    }
    @Override
    public void onUpgrade(SQLiteDatabase database, int version_old, int current_version) {
        String query;
        query = "DROP TABLE IF EXISTS users";
        database.execSQL(query);
        onCreate(database);
    }

    /**
     * Inserts User into SQLite DB
     * @param queryValues
     */
    public void insertUser(HashMap<String, String> queryValues) {
        SQLiteDatabase database = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("userId", queryValues.get("userId"));
        values.put("userName", queryValues.get("userName"));
        database.insert("users", null, values);
        database.close();
    }

    /**
     * Get list of Users from SQLite DB as Array List
     * @return
     */
    public ArrayList<HashMap<String, String>> getAllUsers() {
        ArrayList<HashMap<String, String>> usersList;
        usersList = new ArrayList<HashMap<String, String>>();
        String selectQuery = "SELECT  * FROM users";
        SQLiteDatabase database = this.getWritableDatabase();
        Cursor cursor = database.rawQuery(selectQuery, null);
        if (cursor.moveToFirst()) {
            do {
                HashMap<String, String> map = new HashMap<String, String>();
                map.put("userId", cursor.getString(0));
                map.put("userName", cursor.getString(1));
                usersList.add(map);
            } while (cursor.moveToNext());
        }
        database.close();
        return usersList;
    }

}

GCMBroadcastReceiver.java

public class GCMBroadcastReceiver extends BroadcastReceiver {
    DBController controller = new DBController(this);
    HashMap<String, String> queryValues; 

     @Override
        public void onReceive(Context context, Intent intent) {
             ...
        }
}

現在的問題是,當在GCMBroadcastReceiver.java類中調用我的數據庫控制器類(DBController.java)時,它在下面給出了一條錯誤消息。 請問我做錯了什么嗎?

說明資源路徑位置類型構造函數DBController(GCMBroadcastReceiver)未定義GCMBroadcastReceiver.java / GCMtest / src / com / gcm / gcmtest第14行Java問題

GCMBroadcastReceiver ,您可以在其中一行包含new DBController(this) BroadcastReceiver不是Context ,因此沒有有效的構造函數。 使用傳遞給onReceive()Context 這將意味着延遲初始化該字段,直到onReceive()為止。

在您的GCMBroadcastReceiver類中,初始化DBController(this) 嘗試在onReceive()方法內部初始化DBController。 您可以使用method參數中的上下文,使其看起來像這樣: controller = new DBController(context);

使用onReceive()方法初始化DBController,因為上下文將傳遞給它,並且您可以使用該上下文來初始化DBController。

對於前。 像這樣..

public class GCMBroadcastReceiver extends BroadcastReceiver {
DBController controller ;
HashMap<String, String> queryValues; 

 @Override
    public void onReceive(Context context, Intent intent) {
         controller =new DBController(context);
    }

}

希望對您有幫助。

一旦初始化,就可以在此類的任何地方使用其實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM