Java 从firebase检索图像时出错
从应用程序中删除图像时出现此错误 E/InputEventReceiver:异常调度输入事件。 E/MessageQueue JNI:MessageQueue回调中的异常: HandlerReceiveCallback E/MessageQueue JNI: java.lang.IllegalArgumentException:无法创建存储Uri 解析 这是我的代码,我写它是为了删除 Images\u activity.java:Java 从firebase检索图像时出错,java,android,database,firebase-realtime-database,firebase-storage,Java,Android,Database,Firebase Realtime Database,Firebase Storage,从应用程序中删除图像时出现此错误 E/InputEventReceiver:异常调度输入事件。 E/MessageQueue JNI:MessageQueue回调中的异常: HandlerReceiveCallback E/MessageQueue JNI: java.lang.IllegalArgumentException:无法创建存储Uri 解析 这是我的代码,我写它是为了删除 Images\u activity.java: public class Images_Avctivity ex
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);
}
}
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;
}
}
public class Images\u avactivity扩展AppCompativity实现Images\u adapter.OnItemClickListener{
私人回收视图mRecyclerView;
专用镜像适配器mAdapter;
私人ProgressBar mProgressCircle;
私有火基存储;
私有数据库引用mDatabaseRef;
私人价值事件监听器mDBListener;
私人列表多路复用器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u images\u avactivity);
mRecyclerView=findviewbyd(R.id.recycler\u视图);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(新的LinearLayoutManager(this));
mProgressCircle=findviewbyd(R.id.progress\u circle);
mUploads=newarraylist();
mAdapter=新映像适配器(Images\u avactivity.this,mulploads);
mRecyclerView.setAdapter(mAdapter);
setOnItemClickListener(Images\u avactivity.this);
mStorage=FirebaseStorage.getInstance();
mDatabaseRef=FirebaseDatabase.getInstance().getReference(“上载”);
mDBListener=mDatabaseRef.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
mUploads.clear();
对于(DataSnapshot postSnapshot:DataSnapshot.getChildren()){
Upload Upload=postSnapshot.getValue(Upload.class);
upload.setKey(postsnashot.getKey());
添加(上传);
}
mAdapter.notifyDataSetChanged();
mProgressCircle.setVisibility(视图.不可见);
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
Toast.makeText(Images\u avactivity.this,databaseError.getMessage(),Toast.LENGTH\u SHORT.show();
mProgressCircle.setVisibility(视图.不可见);
}
});
}
@凌驾
公共空间单击(内部位置){
Toast.makeText(这是“正常单击位置:”+位置,Toast.LENGTH_SHORT).show();
}
@凌驾
在任何鼠标右键(int位置)上的公共无效{
Toast.makeText(这是“在位置处单击任何内容:”+位置,Toast.LENGTH_SHORT).show();
}
@凌驾
公共位置单击(内部位置){
上传selectedItem=mUploads.get(位置);
最后一个字符串selectedKey=selectedItem.getKey();
StorageReference imageRef=mStorage.getReferenceFromUrl(selectedItem.getImageUrl());
imageRef.delete().addOnSuccessListener(新的OnSuccessListener()){
@凌驾
成功时公开作废(作废避免){
mDatabaseRef.child(selectedKey).removeValue();
Toast.makeText(Images_avactivity.this,“Item deleted”,Toast.LENGTH_SHORT.show();
}
});
}
@凌驾
受保护的空onDestroy(){
super.ondestory();
mDatabaseRef.removeEventListener(mDBListener);
}
}
这是adpater代码:
Image\u adapter.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);
}
}
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;
}
}
公共类映像\u适配器扩展了RecyclerView.adapter{
私有上下文;
私人列表多路复用器;
私人监听者;
公共映像_适配器(上下文、列表上载){
mContext=上下文;
mUploads=上传;
}
@凌驾
public ImageViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutFlater.from(mContext)。充气(R.layout.image_项,父项,false);
返回新的ImageViewHolder(v);
}
@凌驾
BindViewHolder上的公共无效(ImageViewHolder,int位置){
Upload uploadCurrent=mUploads.get(位置);
holder.textViewName.setText(uploadCurrent.getName());
毕加索(McContext)
.load(uploadCurrent.getImageUrl())
.占位符(R.mipmap.ic_启动器)
.fit()
.centerCrop()
.插入(支架.图像视图);
}
@凌驾
public int getItemCount(){
返回mUploads.size();
}
公共类ImageViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener,
View.OnCreateContextMenuListener,MenuItem.OnMenuItemClickListener{
公共文本视图文本视图名称;
公共影像视图;
公共图像视图持有者(视图项视图){
超级(项目视图);
textViewName=itemView.findViewById(R.id.text\u view\u name);
imageView=itemView.findViewById(R.id.image\u view\u upload);
setOnClickListener(这个);
setOnCreateContextMenuListener(这个);
}
@凌驾
公共void onClick(视图v){
if(mListener!=null){
int position=getAdapterPosition();
如果(位置!=RecyclerView.无位置){
姆利斯滕纳·奥尼麦克利克(职位);
}
}
}
@凌驾
public void onCreateContextMenu(ContextMenu菜单,视图v,ContextMenu.ContextMenuInfo菜单信息){
菜单。设置标题(“选择操作”);
MenuItem doWhatever=menu.add(menu.NONE,1,1,“Do