android:SQLite Db错误

时间:2013-09-26 18:03:31

标签: android database sqlite

你好我正在为我的android应用程序构建一个SQLite Db。这是代码:

package com.example.pap_e;



import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class FeedsDbAdapter {

    private final Context mCtx;
    private static final String DEBUG_TAG = "RSSDatabase";
    private static final int DB_VERSION = 1;
    private static final String DB_NAME = "rss_data";
    public static String TABLE = "list";
    public static final String ID = "_id";
    public static final String RSS = "_rss";
    public static final String TITLE = "_title";
    public static final String PUBDATE = "_pubdate";
    public static final String DESCRIPTION = "_description";
    public static final String LINK = "_link";
    private DatabaseHelper mDbHelper;
    private SQLiteDatabase mDb;



    private static class DatabaseHelper extends SQLiteOpenHelper{
        DatabaseHelper(Context context) {
            super(context, DB_NAME, null, DB_VERSION);
        }


        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL("CREATE_TABLE"+TABLE+"("+ID+ "integer PRIMARY KEY AUTOINCREMENT,"+RSS+"text NOT NULL,"
                    +TITLE+"text NOT NULL,"+PUBDATE+"text NOT NULL,"+DESCRIPTION+"text NOT NULL,"+LINK+"text NOT NULL"+")");
        }
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS " + TABLE);
            onCreate(db);}

    }
    public FeedsDbAdapter open() throws SQLException {

        mDbHelper = new DatabaseHelper(mCtx);
        mDb = mDbHelper.getWritableDatabase();
        return this;
        }
        public void close() {
        mDbHelper.close();
        }

        public boolean updateAnakoinosi(long rowId, String rss, String title,
                String pubdate, String description, String link) {
                ContentValues args = new ContentValues();
                args.put(RSS, rss);
                args.put(TITLE, title);
                args.put(PUBDATE, pubdate);
                args.put(DESCRIPTION, description);
                args.put(LINK, link);
                return mDb.update(TABLE, args, ID + "=" + rowId, null) > 0;}
                public Cursor fetchAllAnakoinoseis() {
                return mDb.query(TABLE, new String[] { ID, RSS, TITLE, PUBDATE,
                DESCRIPTION,LINK }, null, null, null, null, null); }



}

问题是我在public class FeedsDbAdapter收到错误,上面写着:“空白的最终字段mCtx可能尚未初始化”但是我使用private final Context mCtx;初始化了我在这里错过了什么?非常感谢提前!

4 个答案:

答案 0 :(得分:1)

将您的代码更改为:

private static class DatabaseHelper extends SQLiteOpenHelper{
    DatabaseHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);

        mCtx = context;
    }

答案 1 :(得分:1)

您尚未初始化上下文。你必须在FeedsDbAdapter构造函数中初始化它,如:

public FeedsDbAdapter (Context context){

       mCtx = context;
     }

首先声明FeedsDbAdapter构造函数,因为您通过其他类中的构造函数使用FeedsDbAdapter类,而其他活动上下文将分配给此当前上下文。

答案 2 :(得分:0)

你的这个问题与java有关。这一行private final Context mCtx;只是类型context的字段mCtx的声明。并且由于此字段已声明为final,因此必须在构造函数mCtx = context;内进行初始化。即使mCtx未被声明为final,它仍然需要在被使用之前进行初始化。

答案 3 :(得分:0)

那是因为你的班级是静态的......从班级中删除静态并将代码更改为

DatabaseHelper(Context context) {
    super(context, DB_NAME, null, DB_VERSION);
    mCtx = context;
}