Я пытаюсь извлечь данные из базы данных в просмотр в режиме повторного использования, но единственное имя изображения отображается в этом окне. Изображение не загружается в изображение. Вот мой код и изображения Firebase. фрагмент. Здоровье. 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 (класс модели)
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;
}
}
Переменные также такие же, как в базе данных, и значение read равно true. Вот изображение базы данных.
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>
Скажите, пожалуйста, где у меня проблема с моим кодом. Название изображения отображается, но изображение не загружается в программе просмотра. Заранее спасибо.
Приложение Mobile View
Административная активность
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();
}
}
}