Android 从数据库获取信息始终返回-1

Android 从数据库获取信息始终返回-1,android,database,android-sqlite,Android,Database,Android Sqlite,我是android编程新手,我不明白为什么从SQLite数据库获取整数值总是返回-1。 我的应用程序由主活动组成,如果数据库不存在,我将在主活动中创建,并以这种方式用全零填充第一行 DatabaseHelper databaseHelper = new DatabaseHelper(this); Cursor data = databaseHelper.getInformation(); if(!data.moveToFisrt()) { databaseHelper.addInform

我是android编程新手,我不明白为什么从SQLite数据库获取整数值总是返回-1。 我的应用程序由主活动组成,如果数据库不存在,我将在主活动中创建,并以这种方式用全零填充第一行

DatabaseHelper databaseHelper = new DatabaseHelper(this);
Cursor data = databaseHelper.getInformation();
if(!data.moveToFisrt()) {
    databaseHelper.addInformation(0, 0, 0);
}
现在,我启动实现自定义视图的第二个活动。在这个活动中,我实现了一个自定义视图,在自定义视图中,我更新了先前在主活动中创建的行,然后以这种方式调用adinfo方法

DatabaseHelper databaseHelper = new DatabaseHelper(this);
Cursor data = databaseHelper.getInformation();
if(!data.moveToFisrt()) {
    databaseHelper.addInformation(0, 0, 0);
}
第二项活动

private CustomView cv;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);    
    cv= new CustomView(this);
    setContentView(R.layout.activity_game);
}
自定义视图

//all the constructors call init()
private void init(Context context){
        /***/
        databaseHelper = new DatabaseHelper(getContext());
        int w, l, d;
        Cursor data = databaseHelper.getInformation();
        w = data.getColumnIndex(String.valueOf(1));
        l = data.getColumnIndex(String.valueOf(2));
        d = data.getColumnIndex(String.valueOf(3));
        //here w,l,d are -1
    }
这是我的数据库助手

public class DatabaseHelper extends SQLiteOpenHelper {


    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table "+TABLE_NAME1+" (ID INTEGER PRIMARY KEY AUTOINCREMENT, W INT, D INT, L INT)");
        //i have a second table
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int i, int i1) {
        db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME1);
        onCreate(db);
    }

    public boolean addInformation(int w, int l, int d){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();

        if(w != -1) {
            values.put("W", w);
        }
        if(d != -1)
            values.put("D", d);
        if(l != -1)
            values.put("L", l);

        long id = db.insert(TABLE_NAME1, null, values);

        db.close();
        if(id == -1)
            return false;
        else
            return true;

    }

    public Cursor getInformation(){
        SQLiteDatabase db = this.getReadableDatabase();
        String query = "SELECT * FROM " + TABLE_NAME1;
        Cursor c = db.rawQuery(query,null);
        return c;
    }
}
我还注意到,我的数据库包含第二个表。第二个选项卡填充在自定义视图中,然后在我返回主活动时显示。 插入到自定义视图中的记录将正确显示在主活动中。
此外,如果在自定义视图中,我必须首先调用getInformation,然后调用addInformation(5,5,5),在getInformation()之后返回-1,getColumnIndex将列名转换为列号。除非您的列名为“1”、“2”和“3”,否则此代码不正确。我想您需要
getInt(getColumnIndex(“列的名称”)


请记住,SELECT*返回的列的顺序是任意的,因此不要假设1、2和3中的内容。用我上面贴的代码加上“W”、“D”和“L”

你完全正确。我以为我在做data.getInt(列索引)。