我的回收者视图未显示任何火力地堡图像 [英] My recycler view is not showing any firebase images

查看:48
本文介绍了我的回收者视图未显示任何火力地堡图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从数据库检索数据到recyclerview,但是图像的唯一名称显示在recyclerview中.图像未在image中加载.这是我的代码和Firebase图像. fragmentHealthtips.java

I am trying to retrieve data from the database to a recyclerview but the only name of an image is showing in the recyclerview. The image is not getting load in image . Here is my code and firebase images. fragmentHealthtips.java

package com.example.bbeast.HomeActivity;

import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.example.bbeast.R;
import com.example.bbeast.Upload;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.squareup.picasso.Picasso;

import java.util.List;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

public class fragmentHealthTips extends Fragment {
    private RecyclerView mRecyclerView;
    private DatabaseReference mDataRef;




    public static class hViewHolder extends RecyclerView.ViewHolder{
        TextView uName;
        ImageView hImageView;

        public hViewHolder(@NonNull View itemView) {
            super(itemView);
            uName = itemView.findViewById(R.id.healthtips_name);
            hImageView = itemView.findViewById(R.id.healthtips_imageView);

        }
    }


    View view;

    public void fragmentHealthTips() {

    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        view = inflater.inflate(R.layout.healthtips_fragment, container, false);
        mRecyclerView =(RecyclerView)view.findViewById(R.id.healthtips_recyclerView);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        mDataRef = FirebaseDatabase.getInstance().getReference().child("Uploads");
        return view;
    }

    @Override
    public void onStart() {
        super.onStart();
        FirebaseRecyclerOptions options =
                new FirebaseRecyclerOptions.Builder<HealthTips>()
                .setQuery(mDataRef, HealthTips.class)
                .build();
        FirebaseRecyclerAdapter<HealthTips, hViewHolder> adapter= new FirebaseRecyclerAdapter<HealthTips, hViewHolder>(options) {
            @Override
            protected void onBindViewHolder(@NonNull final hViewHolder holder, int i, @NonNull final HealthTips healthTips) {
                String hName = healthTips.getName();
                String hImage = healthTips.getImageUrl();
                holder.uName.setText(hName);
                Picasso.get().load(hImage).into(holder.hImageView);



            }
            @NonNull
            @Override
            public hViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.items_healthtips, parent, false);
                hViewHolder viewHolder = new hViewHolder(view);
                return viewHolder;
            }
        };

        mRecyclerView.setAdapter(adapter);
        adapter.startListening();

    }


}

Healthtips.java(模型类)

Healthtips.java (Model Class)

package com.example.bbeast.HomeActivity;

import java.util.jar.Attributes;

public class HealthTips {
    private String hName, hImageUrl;

    public HealthTips(){


    }
    public HealthTips(String name, String imageUrl){

        hName = name;
        hImageUrl = imageUrl;

    }
    public String getName(){
        return hName;
    }
    public void setName(String name){
        hName = name;
    }
    public String getImageUrl(){
        return hImageUrl;
    }
    public void setImageUrl(String imageUrl){
        hImageUrl= imageUrl;
    }


}

变量也与数据库中的变量相同,并且读取的值为true.这是数据库的图像.

The variables are also as same as in the database and the read value is true. Here is an image of the database.

Xml文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:id="@+id/healthtips_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Name"
            android:textSize="30sp"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="20dp"
            android:layout_marginBottom="20dp"/>
        <ImageView
            android:id="@+id/healthtips_imageView"
            android:layout_width="match_parent"
            android:layout_height="300dp"
            android:layout_marginTop="20dp"
            android:background="@drawable/imageview_bg"/>


    </LinearLayout>



</androidx.cardview.widget.CardView>

如果我的代码有问题,请告诉我.正在显示图像的名称,但未在recyclerview中加载图像.预先谢谢你.

Please tell me if where I m having a problem with my code. The name of an image is showing but an image is not loading in recyclerview. Thank you in advance.

App Mobile视图

管理员活动

package com.example.bbeast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentResolver;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.webkit.MimeTypeMap;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.OnProgressListener;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.StorageTask;
import com.google.firebase.storage.UploadTask;
import com.squareup.picasso.Picasso;

public class Admin extends AppCompatActivity {
    private static final int Pick_Image_Request = 1;
    private Button mButtonChooseImage;
    private Button mButtonUpload;
    private TextView mTextViewShowUploads;
    private EditText mEditTextFileName;
    private ImageView mImageView;
    private ProgressBar mProgressBar;
    private StorageTask mUploadTask;
    private Uri mImageUri;
    private StorageReference mStorageRef;
    private DatabaseReference mDatabaseRef;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_admin);
        Intent intent = getIntent();
        mButtonChooseImage = findViewById(R.id.button_choose_image);
        mButtonUpload = findViewById(R.id.button_upload);
        mTextViewShowUploads = findViewById(R.id.text_view_show_uploads);
        mEditTextFileName = findViewById(R.id.edit_text_file_name);
        mImageView = findViewById(R.id.image_view);
        mProgressBar = findViewById(R.id.progress_bar);

        mStorageRef = FirebaseStorage.getInstance().getReference("Uploads");
        mDatabaseRef = FirebaseDatabase.getInstance().getReference("Uploads");

        mButtonChooseImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                OpenFileChooser();
            }
        });
        mButtonUpload.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TO avoid number of uploads in same time
                if(mUploadTask != null && mUploadTask.isInProgress()){
                    Toast.makeText(Admin.this, "Upload in progress", Toast.LENGTH_SHORT).show();
                } else {
                    uploadFile();
                }

            }
        });
        mTextViewShowUploads.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });


    }

    private void OpenFileChooser() {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"), Pick_Image_Request);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode== Pick_Image_Request && resultCode==RESULT_OK && data != null && data.getData() != null){
            mImageUri = data.getData();
            Picasso.get().load(mImageUri).into(mImageView);

        }
    }
    private String getFileExtension(Uri uri){
        ContentResolver cR = getContentResolver();
        MimeTypeMap mime = MimeTypeMap.getSingleton();
        return mime.getExtensionFromMimeType(cR.getType(uri));
    }
    private void uploadFile(){
        if(mImageUri != null){
            StorageReference fileReference = mStorageRef.child(System.currentTimeMillis() + '.' + getFileExtension(mImageUri));
            // This code is to implement something when our upload is successful, failed and in progress.
            mUploadTask= fileReference.putFile(mImageUri)
                    .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                            //To set progressbar to 0 after sucessful upload
                            Handler handler = new Handler();
                            handler.postDelayed(new Runnable() {
                                @Override
                                public void run() {
                                    mProgressBar.setProgress(0);
                                }
                            }, 5000);
                            Toast.makeText(Admin.this, "Upload Successful", Toast.LENGTH_SHORT).show();
                            Upload upload = new Upload(mEditTextFileName.getText().toString().trim(),
                                    taskSnapshot.getMetadata().getReference().getDownloadUrl().toString());
                            // To create a unique id of an uploaded data we use:
                            String uploadId = mDatabaseRef.push().getKey();
                            mDatabaseRef.child(uploadId).setValue(upload);


                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Toast.makeText( Admin.this, "Upload failed please try again", Toast.LENGTH_SHORT).show();
                        }
                    })
                    .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                            double progress = (100.0 * taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
                            mProgressBar.setProgress((int) progress);
                        }
                    });

        } else {
            Toast.makeText(this, "No file selected", Toast.LENGTH_SHORT).show();
        }

    }
}

推荐答案

我将假定这是数据库:

Uploads
|
|---------someID
          |
          |----name:"...."
               image:"..........."


---------someID
          |
          |----name:"...."
               image:"..........."

如果您的数据库在onBindViewHolder中是这样的:

If your database is some thing like this in onBindViewHolder:

FirebaseRecyclerAdapter<HealthTips, hViewHolder> adapter= new FirebaseRecyclerAdapter<HealthTips, hViewHolder>(options) {
 @Override
protected void onBindViewHolder(@NonNull final hViewHolder holder, int i, @NonNull final HealthTips healthTips) {


//directly get the values like this
String Iname = healthTips.getName();
String Uimage = healthTips.getImage();
holder.hName.setText(Iname);
Picasso.get().load(Uimage).into(holder.hImageview);


}
...............
 ..............

根据您的数据库,您的HealthTips必须如下所示:

According to your database your HealthTips must be like this:

public class HealthTips {

private String name, imageUrl;

public HealthTips(){


}
public HealthTips(String name, String imageUrl){

    this.name = name;
    this.imageUrl = imageUrl;

}
public String getName(){
    return name;
}
public void setName(String name){
    this.name = name;
}
public String getImageUrl(){
    return imageUrl;
}
public void setImageUrl(String imageUrl){
    this.imageUrl= imageUrl;
}


}

更新----------

我认为您将网址错误上传到数据库,也许可以在uploadFile()onSuccess()中尝试此操作:

I think you are uploading the url wrong to database, maybe try this in onSuccess() of the uploadFile():

........
........
Toast.makeText(Admin.this, "Upload Successful",Toast.LENGTH_SHORT).show();


//get download url
fileReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
//this is the url to post to database
Upload upload = new Upload(mEditTextFileName.getText().toString().trim(),uri.toString());

//upload
String uploadId = mDatabaseRef.push().getKey();
mDatabaseRef.child(uploadId).setValue(upload);

}

............
............

这篇关于我的回收者视图未显示任何火力地堡图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆