[英]Observer on LiveData still active after removeObservers
[英]LiveData observer not removed after removing
我正在观察LiveData
中的对象列表,我已经手动删除了观察者,但它没有被删除。 更改后再次调用它。 这是代码。 这里repo.
getKeyFor' 针对传递的 arguments 返回LiveData<List<ImageAddress>>
。 ImageAddress 是我创建的 class。
repo.getKeyFor(fname).observe(this, new Observer<List<ImageAddress>>() {
@Override
public void onChanged(List<ImageAddress> imageAddresses) {
try{
Log.d(TAG, "onChanged: decrpted Image inside :"+fname);
ImageAddress imageAddress=imageAddresses.get(0);
String strKey=imageAddress.getKey();
Log.d(TAG, "onChanged: IMAGE address:"+imageAddresses.get(0).getAddress()+", "+imageAddress.getKey());
SecretKey k=convertKey(strKey);
byte[] decryptedImgArray=cryptoChaCha20.decrypt(imgArr,k);
String decFile=getChangedFileName(rawFilePath,"Decrypted");
saveFile(decFile,decryptedImgArray);
Log.d(TAG, "onChanged: decrpted Image inside :"+fname);
Toast.makeText(getApplicationContext(),"File Decrypted! Saved to gallery!",Toast.LENGTH_SHORT).show();
if(isImageFile(decFile)){
Bitmap bitmap = BitmapFactory.decodeByteArray(decryptedImgArray , 0, decryptedImgArray.length);
imageView.setImageBitmap(bitmap); }
}
catch (Exception e){
e.printStackTrace();
finish();
}
finally{
repo.getKeyFor(fname).removeObservers(MainActivity.this);}
}
});
getKeyFor() 的代码
LiveData<List<ImageAddress>> getKeyFor(String address){ return dao.getKeyFor(address);}
注意:假设 dao 是由 room 生成的,getKeyFor 方法将在每次调用中返回一个新的 LiveData 实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.