FirebaseRealtimeDatabase-编辑RealtimeDatabase条目时,活动会自动打开吗?

时间:2019-05-07 21:09:42

标签: java android firebase firebase-realtime-database

某事使我感到困惑。由于某种原因,在我的照片应用程序中,我注意到,每当在Firebase Realtime Database中编辑孩子/条目时(在该位置检索照片的位置名称),都会在我的应用程序中使用照片预览Activity自动打开我编辑过其条目的照片...

也许我真的很傻,但是我看不出我的代码如何允许这种情况发生。我将在下面发布我认为相关的代码。

在我的ImageAdapter类中,onBindViewHolder是处理用户单击图像的代码:

    final StorageReference mStorageRef = FirebaseStorage.getInstance().getReference();
    final StorageReference fullSizeImagesStoragePath = mStorageRef.child("images/" + getGridItem(position) + ".jpg");
    final Task getFullImageStorageUrl = fullSizeImagesStoragePath.getDownloadUrl();

    imageViewHolder.gridImageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            getFullImageStorageUrl.addOnCompleteListener(new OnCompleteListener<Uri>() {
                @Override
                public void onComplete(final @NonNull Task<Uri> task) {

                    Glide
                            .with(getActivity)
                            .asBitmap()
                            .load(thumbSizeImagesStoragePath)
                            .into(new SimpleTarget<Bitmap>() {
                                @Override
                                public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
                                    Palette.from(resource).maximumColorCount(20).generate
                                            (new Palette.PaletteAsyncListener() {
                                                @Override
                                                public void onGenerated(@NonNull Palette palette) {
                                                    final Palette.Swatch dominantSwatch = palette.getDominantSwatch();
                                                    if (dominantSwatch != null) {

                                                        // This method finds and assigns the FireBase Database references, zeroes it down to the "Locations" item
                                                        // for the specific gridItem that was selected, and returns all the necessary color palette, url, and
                                                        // Location name info to the Photo-viewing activity.
                                                        mDatabaseImagesRef = FirebaseDatabase.getInstance().getReference().child("images_list");
                                                        DatabaseReference data = mDatabaseImagesRef.child(getGridItem(position).toString()).child("l");
                                                        data.addValueEventListener(new ValueEventListener() {
                                                            @Override
                                                            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                                                Object locationKey = dataSnapshot.getValue();
                                                                String locationNameString = (String) locationKey;

                                                                int dominantSwatchRgb = dominantSwatch.getRgb();

                                                                Uri uri = task.getResult();
                                                                String url = uri.toString();
                                                                int objectToInt = (Integer) getGridItem(position);

                                                                Intent intent = new Intent(getActivity, PhotoDetailsActivity.class);
                                                                intent.putExtra("Image int", objectToInt);
                                                                intent.putExtra("imageURL", url);
                                                                intent.putExtra("paletteColor", dominantSwatchRgb);
                                                                intent.putExtra("photoLocationName", locationNameString);
                                                                getActivity.startActivity(intent);
                                                            }

                                                            @Override
                                                            public void onCancelled(@NonNull DatabaseError databaseError) {

                                                            }
                                                        });
                                                    }
                                                }
                                            });
                                }
                            });
                }
            });
        }
    });

对不起,我知道可能有很多代码需要阅读...我不确定要包含多少内容,所以我想我将所有方法都粘贴进去了。

我不明白的是,以上所有代码都包含在onClickListener中,因此在更新Realtime Database时如何自动调用或运行它?不应该只在用户实际单击照片列表中的图像时运行它吗?

还不明白的是,仅当正在编辑的Realtime Database数据是我的RecyclerView中当前在屏幕上或最近打开过的照片时,这种情况才会发生(所以我假设它在缓存中-即使我创建了一种方法,可以在退出照片预览时删除缓存...)。

我希望这篇文章有意义,我真的很想弄清楚为什么要这么做。

0 个答案:

没有答案