移除后未移除 LiveData 观察器
LiveData observer not removed after removing
我正在观察 LiveData
中的对象列表 我已经手动删除了观察者,但它没有被删除。更改后再次调用它。这是代码。这里 repo.
getKeyFor' returns 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);}
- 将 LiveData(return由 getKeyFor 编辑)保存到变量
- 然后对该变量调用 removeObservers
注意:假设 dao 是由 room 生成的,方法 getKeyFor 将在每次调用时 return 一个新的 LiveData 实例。
我正在观察 LiveData
中的对象列表 我已经手动删除了观察者,但它没有被删除。更改后再次调用它。这是代码。这里 repo.
getKeyFor' returns 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);}
- 将 LiveData(return由 getKeyFor 编辑)保存到变量
- 然后对该变量调用 removeObservers
注意:假设 dao 是由 room 生成的,方法 getKeyFor 将在每次调用时 return 一个新的 LiveData 实例。