繁体   English   中英

移除后未移除 LiveData 观察者

[英]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);}
  1. 将 LiveData(由 getKeyFor 返回)保存到变量
  2. 然后对该变量调用 removeObservers

注意:假设 dao 是由 room 生成的,getKeyFor 方法将在每次调用中返回一个新的 LiveData 实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM