【问题标题】:error for retrieving an images from firebase从 firebase 检索图像时出错
【发布时间】:2020-06-14 11:14:06
【问题描述】:

我在从应用程序中删除图像时遇到此错误

E/InputEventReceiver:异常调度输入事件。 E/MessageQueue-JNI:MessageQueue 回调中的异常: handleReceiveCallback E/MessageQueue-JNI: java.lang.IllegalArgumentException:存储 Uri 不能 已解析。

这是我的代码,我写它以供删除

Images_Actvity.java:

public class Images_Avctivity extends AppCompatActivity implements Image_adapter.OnItemClickListener {
    private RecyclerView mRecyclerView;
    private Image_adapter mAdapter;

    private ProgressBar mProgressCircle;

    private FirebaseStorage mStorage;
    private DatabaseReference mDatabaseRef;
    private ValueEventListener mDBListener;

    private List<Upload> mUploads;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_images__avctivity);

        mRecyclerView = findViewById(R.id.recycler_view);
        mRecyclerView.setHasFixedSize(true);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

        mProgressCircle = findViewById(R.id.progress_circle);

        mUploads = new ArrayList<>();

        mAdapter = new Image_adapter(Images_Avctivity.this, mUploads);

        mRecyclerView.setAdapter(mAdapter);

        mAdapter.setOnItemClickListener(Images_Avctivity.this);

        mStorage = FirebaseStorage.getInstance();
        mDatabaseRef = FirebaseDatabase.getInstance().getReference("uploads");

        mDBListener = mDatabaseRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                mUploads.clear();

                for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                    Upload upload = postSnapshot.getValue(Upload.class);
                    upload.setKey(postSnapshot.getKey());
                    mUploads.add(upload);
                }

                mAdapter.notifyDataSetChanged();

                mProgressCircle.setVisibility(View.INVISIBLE);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                Toast.makeText(Images_Avctivity.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show();
                mProgressCircle.setVisibility(View.INVISIBLE);
            }
        });
    }

    @Override
    public void onItemClick(int position) {
        Toast.makeText(this, "Normal click at position: " + position, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onWhatEverClick(int position) {
        Toast.makeText(this, "Whatever click at position: " + position, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onDeleteClick(int position) {
        Upload selectedItem = mUploads.get(position);
        final String selectedKey = selectedItem.getKey();

        StorageReference imageRef = mStorage.getReferenceFromUrl(selectedItem.getImageUrl());
        imageRef.delete().addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {
                mDatabaseRef.child(selectedKey).removeValue();
                Toast.makeText(Images_Avctivity.this, "Item deleted", Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mDatabaseRef.removeEventListener(mDBListener);
    }
}

这是适配器代码:

Image_adapter.java:

 public class Image_adapter extends RecyclerView.Adapter<Image_adapter.ImageViewHolder> {

        private Context mContext;
        private List<Upload> mUploads;
        private OnItemClickListener mListener;

        public Image_adapter(Context context, List<Upload> uploads) {
            mContext = context;
            mUploads = uploads;
        }

        @Override
        public ImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View v = LayoutInflater.from(mContext).inflate(R.layout.image_item, parent, false);
            return new ImageViewHolder(v);
        }

        @Override
        public void onBindViewHolder(ImageViewHolder holder, int position) {
            Upload uploadCurrent = mUploads.get(position);
            holder.textViewName.setText(uploadCurrent.getName());
            Picasso.with(mContext)
                    .load(uploadCurrent.getImageUrl())
                    .placeholder(R.mipmap.ic_launcher)
                    .fit()
                    .centerCrop()
                    .into(holder.imageView);
        }

        @Override
        public int getItemCount() {
            return mUploads.size();
        }

        public class ImageViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,
                View.OnCreateContextMenuListener, MenuItem.OnMenuItemClickListener {
            public TextView textViewName;
            public ImageView imageView;

            public ImageViewHolder(View itemView) {
                super(itemView);

                textViewName = itemView.findViewById(R.id.text_view_name);
                imageView = itemView.findViewById(R.id.image_view_upload);

                itemView.setOnClickListener(this);
                itemView.setOnCreateContextMenuListener(this);
            }

            @Override
            public void onClick(View v) {
                if (mListener != null) {
                    int position = getAdapterPosition();
                    if (position != RecyclerView.NO_POSITION) {
                        mListener.onItemClick(position);
                    }
                }
            }

            @Override
            public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
                menu.setHeaderTitle("Select Action");
                MenuItem doWhatever = menu.add(Menu.NONE, 1, 1, "Do whatever");
                MenuItem delete = menu.add(Menu.NONE, 2, 2, "Delete");

                doWhatever.setOnMenuItemClickListener(this);
                delete.setOnMenuItemClickListener(this);
            }

            @Override
            public boolean onMenuItemClick(MenuItem item) {
                if (mListener != null) {
                    int position = getAdapterPosition();
                    if (position != RecyclerView.NO_POSITION) {

                        switch (item.getItemId()) {
                            case 1:
                                mListener.onWhatEverClick(position);
                                return true;
                            case 2:
                                mListener.onDeleteClick(position);
                                return true;
                        }
                    }
                }
                return false;
            }
        }

        public interface OnItemClickListener {
            void onItemClick(int position);

            void onWhatEverClick(int position);

            void onDeleteClick(int position);
        }

        public void setOnItemClickListener(OnItemClickListener listener) {
            mListener = listener;
        }
    }

【问题讨论】:

  • 使用这个 getStorage() 作为参考FromUrl FirebaseStorage.getInstance().getStorage().getReferenceFromUrl(fileURL);
  • 请提供数据库结构
  • 请将您的数据库结构添加为 JSON 文件或至少是屏幕截图。也请回复@AlexMamo
  • 我已经添加了一个数据结构......我可以上传我的图片......问题是在将数据检索到我的应用程序时

标签: java android database firebase-realtime-database firebase-storage


【解决方案1】:
StorageReference storageReference = FirebaseStorage.getInstance().getReferenceFromUrl("https://firebasestorage.googleapis.com/v0/b/***********************-5fac-45b6-bbda-ed4e8a3a62ab");
storageReference.delete().addOnSuccessListener(new OnSuccessListener<Void>() { 
@Override 
public void onSuccess(Void aVoid) {
    // File deleted successfully 
    Log.e("firebasestorage", "onSuccess: deleted file");
    } 
}).addOnFailureListener(new OnFailureListener() { 
@Override 
public void onFailure(@NonNull Exception exception) {
    // Uh-oh, an error occurred! 
    Log.e("firebasestorage", "onFailure: did not delete file");
    } 
}); 

【讨论】:

    猜你喜欢
    • 2019-08-21
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    • 2016-02-12
    • 2021-10-28
    • 2017-12-17
    • 2020-08-05
    • 1970-01-01
    相关资源
    最近更新 更多