#android #firebase #android-fragments #android-recyclerview #picasso
#Android #firebase #android-фрагменты #android-recyclerview #picasso
Вопрос:
У меня есть активность с вкладками, каждая вкладка содержит фрагмент с RecyclerView. Элемент в RecyclerView состоит из изображения с текстом, оба извлечены из базы данных Firebase в режиме реального времени.
Кажется, все работает нормально, без ошибок, однако, когда я запускаю приложение, имя извлекается и отображается, изображение — нет.
Помогите? Заранее спасибо!
Вот фрагмент
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.andrei.bucatariadebuzunar.Clases.ImageUploadInfo;
import com.andrei.bucatariadebuzunar.Clases.ImageUploadInfoViewHolder;
import com.andrei.bucatariadebuzunar.R;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.squareup.picasso.Picasso;
public class FripturiFragment extends Fragment {
public RecyclerView recyclerView;
private DatabaseReference databaseReference;
FirebaseRecyclerOptions<ImageUploadInfo> options;
FirebaseRecyclerAdapter<ImageUploadInfo,ImageUploadInfoViewHolder>adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_layout, container, false);
databaseReference = FirebaseDatabase.getInstance().getReference().child("Recipes_Images").child("Fripturi");
databaseReference.keepSynced(true);
recyclerView = rootView.findViewById(R.id.recyclerViewRecipes);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
LoadData();
return rootView;
}
private void LoadData() {
options = new FirebaseRecyclerOptions.Builder<ImageUploadInfo>().setQuery(databaseReference,ImageUploadInfo.class).build();
adapter = new FirebaseRecyclerAdapter<ImageUploadInfo, ImageUploadInfoViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull ImageUploadInfoViewHolder imageUploadInfoViewHolder, int position, @NonNull ImageUploadInfo model) {
imageUploadInfoViewHolder.textView.setText(model.getImageName());
Picasso.get().load(model.getImageURL()).placeholder(R.drawable.hat).into(imageUploadInfoViewHolder.imageView);
}
@NonNull
@Override
public ImageUploadInfoViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recipe_card_view,parent,false);
return new ImageUploadInfoViewHolder(view);
}
};
adapter.startListening();
recyclerView.setAdapter(adapter);
}
}```
Ответ №1:
Picasso не распознает этот формат URL, поэтому он не сможет отобразить изображение.
StorageReference ref = storage.getReferenceFromUrl(url);
storageRef.child("Recipes_Images").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
//set your image
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle any errors
}
});