移除后未移除 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);}
  1. 将 LiveData(return由 getKeyFor 编辑)保存到变量
  2. 然后对该变量调用 removeObservers

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