Java 从firebase Firestore数据库中的存储器下载图像时出错
我使用firebase存储来存储图像,使用firebase firestore来存储存储的数据和图像url 我在下载图像时遇到以下错误 java.io.IOException:{“error”:{“code”:404,“message”:“Not” 找到。无法获取对象”,“状态”:“获取对象”} 下面是postAdapter类,然后在片段中使用它来检索列表 请让我知道我在这方面哪里出了问题Java 从firebase Firestore数据库中的存储器下载图像时出错,java,android,firebase,google-cloud-firestore,storage,Java,Android,Firebase,Google Cloud Firestore,Storage,我使用firebase存储来存储图像,使用firebase firestore来存储存储的数据和图像url 我在下载图像时遇到以下错误 java.io.IOException:{“error”:{“code”:404,“message”:“Not” 找到。无法获取对象”,“状态”:“获取对象”} 下面是postAdapter类,然后在片段中使用它来检索列表 请让我知道我在这方面哪里出了问题 public class PostsAdapter extends FirestoreRecyclerAd
public class PostsAdapter extends FirestoreRecyclerAdapter<PostsModel, PostsAdapter.PostsHolder> {
private OnItemClickListener listener;
private View.OnClickListener buttonListener;
private Context mContext;
private String id;
//boolean likechecker = false;
private static final String TAG = "DocSnippets";
StorageReference storageReference = FirebaseStorage.getInstance().getReference().child("profile_pic");
public PostsAdapter(@NonNull FirestoreRecyclerOptions<PostsModel> options) {
super(options);
}
@Override
protected void onBindViewHolder(@NonNull final PostsHolder holder, int position, @NonNull final PostsModel model) {
//retrieve the fields here
final String documentId = getSnapshots().getSnapshot(position).getId();
holder.textViewDescription.setText(model.getPostContent());
holder.textViewSpinnerC.setText(model.getPost_author_spinnerC());
holder.textViewCategory.setText(model.getPostcategory());
holder.textViewTitle.setText(model.getPostTitle());
holder.textViewPostUsername.setText(model.getPost_author_username());
storageReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
// Got the download URL for 'users/me/profile.png'
holder.postUserImage.setImageURI(uri);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle any errors
}
});
holder.commentsbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent toCommentActivity = new Intent(view.getContext(), CommentActivity.class);
toCommentActivity.putExtra("PostKey", documentId);
view.getContext().startActivity(toCommentActivity);
}
}); }
@NonNull
@Override
public PostsHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.post_list_layout,
parent, false);
return new PostsHolder(v);
}
public void deleteItem(int position) {
getSnapshots().getSnapshot(position).getReference().delete();
}
public void setOnClickListener(OnClickListener postKey) {
}
class PostsHolder extends RecyclerView.ViewHolder {
TextView textViewTitle;
TextView textViewDescription;
TextView textViewSpinnerC;
TextView textViewCategory;
TextView textViewPostUsername;
TextView textViewTime;
CircleImageView postUserImage;
ImageButton favPostButton;
Button commentsbutton;
public PostsHolder(final View itemView) {
super(itemView);
textViewTitle = itemView.findViewById(R.id.post_item_title);
textViewDescription = itemView.findViewById(R.id.post_item_description);
textViewTime = itemView.findViewById(R.id.post_item_time);
commentsbutton = itemView.findViewById(R.id.commenting_button);
favPostButton = itemView.findViewById(R.id.imageButton1);
textViewSpinnerC = itemView.findViewById(R.id.post_item_SpinnerC);
textViewCategory = itemView.findViewById(R.id.post_item_Category);
postUserImage = itemView.findViewById(R.id.post_user_profile_image);
textViewPostUsername = itemView.findViewById(R.id.post_item_username);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION && listener != null) {
listener.onItemClick(getSnapshots().getSnapshot(position), position);
}
}
});
}
}
public interface OnClickListener
{
void OnClickListener(DocumentSnapshot documentSnapshot, int position);
}
public void setOnClickListener(View.OnClickListener onClickListener) {
this.buttonListener = onClickListener;
}
public interface OnItemClickListener {
void onItemClick(DocumentSnapshot documentSnapshot, int position);
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = listener;
}
}
公共类PostsAdapter扩展FirestoreRecyclerAdapter{
私人监听;
private View.OnClickListener按钮Listener;
私有上下文;
私有字符串id;
//布尔likechecker=false;
私有静态最终字符串TAG=“DocSnippets”;
StorageReference-StorageReference=FirebaseStorage.getInstance().getReference().child(“profile_pic”);
公共PostsAdapter(@NonNull FirestoreRecyclerOptions选项){
超级(期权);
}
@凌驾
BindViewHolder上的受保护无效(@NonNull final PostsHolder holder,int位置,@NonNull final PostsModel){
//在这里检索字段
最后一个字符串documentId=getSnapshots().getSnapshot(位置).getId();
holder.textViewDescription.setText(model.getPostContent());
holder.textViewSpinnerC.setText(model.getPost_author_spinnerC());
holder.textViewCategory.setText(model.getPostcategory());
holder.textViewTitle.setText(model.getPostTitle());
holder.textViewPostUsername.setText(model.getPost\u author\u username());
storageReference.getDownloadUrl().addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时的公共无效(Uri){
//已获取“users/me/profile.png”的下载URL
holder.POSTSERIMAGE.setImageURI(uri);
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常){
//处理任何错误
}
});
holder.commentsbutton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Intent-toCommentActivity=新的意图(view.getContext(),CommentActivity.class);
toCommentActivity.putExtra(“PostKey”,documentId);
view.getContext().startActivity(toCommentActivity);
}
}); }
@非空
@凌驾
public PostsHolder onCreateViewHolder(@NonNull ViewGroup父级,int viewType){
视图v=LayoutInflater.from(parent.getContext())。充气(R.layout.post\u list\u布局,
父母,假);
返回新的后支架(v);
}
公共无效删除项(内部位置){
getSnapshots().getSnapshot(位置).getReference().delete();
}
公共void setOnClickListener(OnClickListener postKey){
}
类PostsHolder扩展了RecyclerView.ViewHolder{
文本视图文本视图标题;
文本视图文本视图描述;
TextView textViewSpinnerC;
文本视图文本视图类别;
TextView textViewPostUsername;
TextView textViewTime;
圆形图像视图姿势图像;
图像按钮favPostButton;
按钮注释按钮;
公共PostsHolder(最终视图项视图){
超级(项目视图);
textViewTitle=itemView.findViewById(R.id.post\u item\u title);
textViewDescription=itemView.findViewById(R.id.post\u item\u description);
textViewTime=itemView.findViewById(R.id.post\u item\u time);
commentsbutton=itemView.findViewById(R.id.commenting_按钮);
favPostButton=itemView.findViewById(R.id.imageButton1);
textViewSpinnerC=itemView.findViewById(R.id.post\u item\u SpinnerC);
textViewCategory=itemView.findViewById(R.id.post\u item\u Category);
postserimage=itemView.findviewbyd(R.id.post\u user\u profile\u image);
textViewPostUsername=itemView.findViewById(R.id.post\u item\u用户名);
itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
int position=getAdapterPosition();
if(position!=RecyclerView.NO_position&&listener!=null){
onItemClick(getSnapshots().getSnapshot(position),position);
}
}
});
}
}
公共接口侦听器
{
void OnClickListener(DocumentSnapshot DocumentSnapshot,int位置);
}
public void setOnClickListener(View.OnClickListener OnClickListener){
this.buttonListener=onClickListener;
}
公共接口侦听器{
void onItemClick(DocumentSnapshot DocumentSnapshot,int位置);
}
公共void setOnItemClickListener(OnItemClickListener侦听器){
this.listener=listener;
}
}
您已经在数据库中提供了用户配置文件图像url。试着用毕加索
Picasso.get().load(model.getPost_user_profile_pic_url()).into(holder.postUserImage);
它正确地说图像不存在,请发布存储截图。但是图像确实存在,我已经验证了。请以正确的方式发布图像存储位置。这是下载URL,我希望它能工作,在profile_pic中有一个文件夹存储图像,先生,您不明白我的意思。我希望存储位置与此类似:
gs://xx.appspot.com/images/6g74sRdiPh5BVApVtOFM.jpg
。