即使数据存在,Android游标有时也会返回空白

时间:2015-02-28 10:31:38

标签: android sqlite android-asynctask cursor is-empty

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

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

以下是执行此工作的代码:

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;
}

编写/更新数据的代码:

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 {
....
}
}

2 个答案:

答案 0 :(得分:0)

请您尝试使用以下代码阅读光标

            if(c != null){

             c.moveToFirst();

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

               c.moveToNext();                
             }

            }

答案 1 :(得分:0)

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