Android 即使数据存在,游标有时 returns 还是空的

Android cursor sometimes returns empty even when the data exists

我有一个 android 应用程序,它首先从 Web 获取一些数据(可能对项目可用的任何更新)并写入数据,然后从数据库中读取获取的数据。 在某些情况下,问题是 android 游标 returns 空游标的读取操作,但我们知道数据存在,因为您几秒钟前更新了确切的行!

事实上,您不能为一些不存在的数据请求在线更新。我搜索了很多但没有结果。我以为我可能是同时阅读和写作,但事实并非如此。

下面是完成这项工作的代码:

protected Biz doInBackground(Void... params) {
            Bundle bundle = BizDetailsActivity.this.getIntent().getExtras();
            // bizID = bundle.getLong(BIZ);

            BizDataSource ds = new BizDataSource(BizDetailsActivity.this);
            ds.openWritable();
            long ID = bundle.getLong(BIZ);
            if (NetworkHelper.IsConnected(BizDetailsActivity.this)) {
                   // HERE we write data if avaiable
                    getBizOnline(ID, ds);
                }
                    //read data from database
                    biz = ds.getBiz(ID, data.getCurrentUser());
                    ds.close();
                        return biz;
}

writing/updating 数据的代码:

public long updateBiz(long ID, String title, String description,
            String address, String phone, String mobile, String fax,
            String owner, long city, String website, double latitude,
            double longitude, int addDate, String expireDate, long gallery,
            String logo, float rate) {

        ContentValues values = new ContentValues();

        values.put(columns[1], title);
        values.put(columns[3], description);
        values.put(columns[4], address);
        values.put(columns[5], city);
        if (gallery > 0) {
            values.put(columns[6], gallery);
        }
        values.put(columns[7], latitude);
        values.put(columns[8], longitude);
        values.put(columns[9], phone);
        values.put(columns[10], mobile);
        values.put(columns[11], fax);
        values.put(columns[12], website);
        values.put(columns[13], owner);
        values.put(columns[14], logo);
        values.put(columns[15], addDate);
        values.put(columns[16], expireDate);
        values.put(columns[19], rate);

        long result;
        try {
            result = database.updateWithOnConflict("Bizes", values, "ID = ?",
                    new String[] { ID + "" },SQLiteDatabase.CONFLICT_FAIL);
        } catch (Exception e) {
            Log.d("UPDATE_BIZ", e.getMessage());
            result = -1;
        }
        return result;
    }

获取数据的代码:

public Biz getBiz(long id, long UserId) {
        Gallery gallery = null;
        City city = null;
        BizCategory category = null;
        Cursor c = database.query("Bizes", columns, "ID=?", new String[] { id + "" }, null, null, null);
        if (c.moveToFirst() == false) {
            // here we got empty cursor !!!!
            c.close();
            return null;
        } else {
....
}
}

你能试试下面的代码来读取你的光标吗

            if(c != null){

             c.moveToFirst();

             while (cursor.isAfterLast() == false) {

               c.moveToNext();                
             }

            }

我发现了问题。我的删除查询错误,在获取数据之前已被删除。