【问题标题】:cursor.moveToFirst() always return falsecursor.moveToFirst() 总是返回 false
【发布时间】:2022-03-17 21:42:23
【问题描述】:

我在这里搜索了一段时间,但没有任何帮助。我想这很简单,我正在做一些愚蠢的事情。所以,我让这个 DataBaseHelper 创建一个表并在其上放置两个值:

public class DatabaseHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "db";
    public static final String PROPERTY = "property";
    public static final String VALUE = "value";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE configs (property VARCHAR(15), value VARCHAR(10));");
    
        ContentValues cv=new ContentValues();
        
        cv.put(PROPERTY, "registered");
        cv.put(VALUE, "true");
        db.insert("configs", PROPERTY, cv);
        
        cv.put(PROPERTY, "test");
        cv.put(VALUE, "test");
        db.insert("configs", PROPERTY, cv);
    }
}

在我的活动中我正在尝试:

@Override
public void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.register);
    
    layout = (LinearLayout) findViewById(R.id.layoutRegister);
    
    db = (new DatabaseHelper(this)).getWritableDatabase();
    cursor = db.rawQuery("SELECT * FROM configs", 
            null);
    
    if (cursor.moveToFirst()) {
        debug = new TextView(this);
        debug.setText(cursor.getString(cursor.getColumnIndex("property")));
        layout.addView(debug);
    }
}

它从不进入 if。此外,当我尝试类似 cursor.getCount() 的东西时,我得到一个 android.content.res.Resource$NotFoundException: String resource ID #0x0

我猜这是一个简单的错误,但是...有什么帮助吗?

【问题讨论】:

标签: android android-cursor


【解决方案1】:

我理解你想在光标有值时设置文本,这样你就可以简单地做到这一点......

cursor = db.rawQuery("SELECT * FROM configs", null);

    if (cursor!=null && cursor.getCount()>0) {
        cursor.moveToFirst();
        debug = new TextView(this);
        debug.setText(cursor.getString(cursor.getColumnIndex("property")));
        layout.addView(debug);
    }

关于

when I try something like cursor.getCount() I get a android.content.res.Resource$NotFoundException: String resource ID #0x0

这是因为当您使用 TextView 的setText() 时,因此如果您将参数作为整数传递,那么它将在 R.class 文件中查找,因此如果您想将文本设置为整数,您可以执行类似...

debug.setText(""+cursor.getCount());

 debug.setText(String.valueOf(cursor.getCount()));

【讨论】:

  • 异常工作的一部分,谢谢。但是 cursor.getCount() 返回 0。所以他说查询中没有数据,并且 if (cursor.moveToFirst()) 将返回 false ...知道吗?
【解决方案2】:

如果您要查询使用 getReadableDatabase 而不是 getWritableDatabase

总是cursor.close();

【讨论】:

    【解决方案3】:

    使用这个

    cv.put(property, "registered");
    cv.put(value, "true");
    

    cv.put(property, "test");
    cv.put(value, "test");
    

    而不是

    cv.put(PROPERTY, "registered");
    cv.put(VALUE, "true");
    

    cv.put(PROPERTY, "test");
    cv.put(VALUE, "test");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-20
      • 2021-11-05
      • 2018-11-05
      • 2019-05-06
      • 2017-04-29
      相关资源
      最近更新 更多