可以关闭()游标对象,然后为其设置一个新值吗?

时间:2018-08-30 12:42:27

标签: java android android-recyclerview android-cursoradapter android-cursor

我试图了解我需要使用的RecyclerView.Adapter实现,其中数据集是Cursor对象。
但是,对于关闭Cursor对象并将其设置为其他值,某些逻辑对我来说并不明确。
close()中到底发生了什么? 这个可以吗。 ?

var testObject = { 'one': 1, 'two': 2, 'three': 3 };

// Put the object into storage
localStorage.setItem('testObject', JSON.stringify(testObject));

// Retrieve the object from storage
var retrievedObject = localStorage.getItem('testObject');

console.log('retrievedObject: ', JSON.parse(retrievedObject));

或者我应该这样安全地玩吗?

   public void setCursor(Cursor cursor){
        mCursor.unregisterContentObserver(mMyContentObserverr);
        mCursor.close();

        mCursor = cursor;
        mCursor.registerContentObserver(mMyContentObserverr);
        notifyDataSetChanged();
    }

使用oldCursor有什么好处?
关闭和设置同一Cursor对象是否存在任何危险?
谢谢

1 个答案:

答案 0 :(得分:1)

您包含的两段代码在功能上是等效的。线

Cursor oldCursor = mCursor;

创建一个新的Cursor引用,该引用指向相同的对象,即mCursoroldCursor在内存中具有相同的位置。由于它们是同一对象,因此oldCursor.close()mCursor.close()完全相同。

但是,当您将mCursor设置为cursor时,mCursor不再引用已关闭的游标;现在它与cursor引用相同的对象。您在新mCursor上执行的任何操作都不会受到旧mCursor的任何影响。

关于应该使用哪个版本,我个人会坚持使用第一个版本。但是,如果您觉得通过创建oldCursor来使代码更清晰,那么就继续吧。完全一样。