Anzeigen von Firebase-Speicherbildern in einem RecyclerView

Hallo ich fragte eine frühere Frage über die Anzeige eines Bildes mit Base64 aus meiner Firebase-Datenbank. Es wurde empfohlen, Firebase-Lagerung zu verwenden. Ich überarbeitete meinen Code und alles lädt in die Firebase-Speicher und Datenbank, wie es sollte. Das Problem, das ich habe, ist, wenn ich die Daten rette, die nichts in mein recyclerview zählt. Alles ist leer.

Jede mögliche Hilfe, die Sie mir zur Verfügung stellen können, um dieses zu arbeiten, würde groß sein. Vielen Dank.

  • Update sql Datenbank mit ContentValues ​​und die Update-Methode
  • Android EditText und Button auf derselben Zeile
  • Push my apk zu / system / app
  • Android-Kamera-Fehler 5001
  • PyQt auf Android
  • Android - Unabhängiges Fragment UI Test Tool
  • EDIT: In meiner Aktivitätsklasse rufe ich einen Button Klicklistener an, um die Kamera zu aktivieren. Sobald das Bild aufgenommen ist, wird es in Firebase Storage gespeichert. Dann lade ich das Bild aus dem Speicher herunter und zeige es in einem recyclerview an. Ich verstehe den hochladenden Teil, aber ich habe Schwierigkeiten, das Herunterladen und Anzeigen von Teil zu verstehen. Vielen Dank.

    Viewholder: Bindungsmethode

    public void bind (ImageProgress progress){ Glide.with(activity).load("").into(image); } } 

    Adapter

      @Override public ProgressViewHolder onCreateViewHolder(ViewGroup parent, int viewType){ return new ProgressViewHolder(activity, activity.getLayoutInflater().inflate(R.layout.weight_progress_list, parent, false)); 

    Hauptaktivitätsklasse

     @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.weight_progress); saveButton = (Button) findViewById(R.id.saveButton); progressStatusEditText = (EditText) findViewById(R.id.progressStatusEditText); progressList = (RecyclerView) findViewById(R.id.progressList); mImageButton = (ImageButton) findViewById(R.id.takePictureButton); capturedImage=(ImageView)findViewById(R.id.capturedImageView); LinearLayoutManager layoutManager = new LinearLayoutManager(this); progressList.setHasFixedSize(false); progressList.setLayoutManager(layoutManager); //take picture button mImageButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { openCamera(); } }); mDatabaseReference = database.getReference("Progress"); saveButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //get current user FirebaseUser user =FirebaseAuth.getInstance().getCurrentUser(); String uid = user.getUid(); ImageProgress progress = new ImageProgress(uid, progressStatusEditText.getText().toString()); mDatabaseReference.push().setValue(progress); progressStatusEditText.setText(""); } }); } private void openCamera() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { Uri cameraImageURI = data.getData(); //reference where images will be stored mStorageReference = storage.getReference("Progress Images"); //reference to store file final StorageReference cameraImageRef = mStorageReference.child(cameraImageURI.getLastPathSegment()); //upload to firebase storage cameraImageRef.putFile(cameraImageURI) .addOnSuccessListener(this, new OnSuccessListener<UploadTask.TaskSnapshot>() { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { Uri downloadUrl = taskSnapshot.getDownloadUrl(); progressStatusEditText.setText(downloadUrl.toString()); } }); } 

  • ImageView - Höhenspielbreite haben?
  • Android OpenGL ES GL10 oder GL11
  • Der richtige Weg, um "Up" Navigation nach Richtlinien zu behandeln
  • So aktivieren Sie Android Download Manager
  • Wie konvertiere ich HashMap zu json Array in Android?
  • Wie bekomme ich die Breite des Containers, in dem meine Ansicht in Android hinzugefügt wird
  • 3 Solutions collect form web for “Anzeigen von Firebase-Speicherbildern in einem RecyclerView”

    Ich schlage vor, dass ihr die setImage-Methode auf deinem RecyclerView.ViewHolder hinzufügst und die URL deines Bildes in dem Objekt speichert, das du in deinem FirebaseRecyclerAdapter .

    In meinem Fall, Im mit einem Gleiten , um die Bilder von meiner App zu verwalten:

    Mein ViewHolder Beispiel:

     public class UserListViewHolder extends RecyclerView.ViewHolder { private final View mView; private static final int POST_TEXT_MAX_LINES = 6; private ImageView mIconView; private TextView mAuthorView; private UserClickListener mListener; public UserListViewHolder(View itemView) { super(itemView); mView = itemView; mIconView = (ImageView) mView.findViewById(R.id.user_image_profile); mAuthorView = (TextView) mView.findViewById(R.id.user_text_profile); mView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mListener.onUserClick(); } }); } public void setIcon(String url) { GlideUtil.loadProfileIcon(url, mIconView);// } public void setPostClickListener(UserClickListener listener) { mListener = listener; } public void setText(final String text) { if (text == null || text.isEmpty()) { mAuthorView.setVisibility(View.GONE); return; } else { mAuthorView.setVisibility(View.VISIBLE); mAuthorView.setText(text); mAuthorView.setMaxLines(POST_TEXT_MAX_LINES); } } public interface UserClickListener { void onUserClick(); } } 

    Und hier ist mein Datenbank-Anruf:

      private FirebaseRecyclerAdapter<Person, UserListViewHolder> getFirebaseRecyclerAdapter(Query query) { return new FirebaseRecyclerAdapter<Person, UserListViewHolder>( Person.class, R.layout.user_row_item, UserListViewHolder.class, query) { @Override protected void populateViewHolder(UserListViewHolder viewHolder, Person model, int position) { setupUser(viewHolder, model, position, null); } }; } private void setupUser(final UserListViewHolder UserViewHolder, final Person user, final int position, final String inPostKey) { final String postKey; if (mAdapter instanceof FirebaseRecyclerAdapter) { postKey = ((FirebaseRecyclerAdapter) mAdapter).getRef(position).getKey(); } else { postKey = inPostKey; } FirebaseUtil.getUsersRef().child(postKey).addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(final DataSnapshot dataSnapshot) { UserViewHolder.setPostClickListener(new UserListViewHolder.UserClickListener() { @Override public void onUserClick() { mGroup.addUserToGroup(dataSnapshot.getKey()); } }); UserViewHolder.setIcon(dataSnapshot.child("photoUrl").getValue(String.class)); UserViewHolder.setText(dataSnapshot.child("displayName").getValue(String.class)); } @Override public void onCancelled(DatabaseError databaseError) { } }); } 

    Sie müssen nur das Bild auf die gleiche Weise, dass Sie Ihre anderen Werte beim Abrufen von Daten aus Firebase, aber mit Ihrem bereits generierten newURL für dieses Bild nach dem Hochladen in die Cloud. Vielleicht findest du einen anderen Weg, um einfach die URL zu setzen, aber ich schlage vor, dass du es wie einen anderen Parameter in deinem benutzerdefinierten Objekt beibehältest, wenn du diese Daten mehrmals einmal abrufen möchtest, auch wenn du das Bild nicht hochladen kannst.

    Hoffe, dass es dir helfen wird!

    Hierfür gibt es bereits eine offizielle Umsetzung.

    https://github.com/firebase/quickstart-android/tree/master/storage

    Die Grundidee besteht darin, das Bild in den Firebase-Speicher hochzuladen und die Image-URL in die Datenbank zu speichern und dann über diesen Link herunterzuladen.

    In der MyDownloadService.java-Klasse wurde mStorageRef.child (downloadPath) .getStream-Methode verwendet, aber ich habe mit der getBytes-Methode implementiert, um nicht mit inputstreams umzugehen. Weil kann Bytes mit Glide leicht laden. Wenn die Aufgabe abgeschlossen ist, sendet sie eine Broadcast-Absicht mit Bytes als Bündel. Sie können den Rundfunkempfänger überall hören, wo Sie wollen, um ur Bild zu laden, wenn es heruntergeladen wird.

     public class DownloadService extends Service{ private StorageReference mStorageRef; @Override public void onCreate() { super.onCreate(); // Initialize Storage mStorageRef = FirebaseStorage.getInstance().getReference(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { if (ACTION_DOWNLOAD.equals(intent.getAction())) { mStorage.child(downloadPath).getBytes(10*1024*1024).addOnSuccessListener(new OnSuccessListener<byte[]>() { @Override public void onSuccess(byte[] bytes) { Log.d(TAG, "download:SUCCESS " + bytes.length); // Send success broadcast with number of bytes downloaded Intent broadcast = new Intent(ACTION_COMPLETED); broadcast.putExtra(EXTRA_DOWNLOAD_BYTES, bytes); broadcast.putExtra(EXTRA_DOWNLOAD_INDEX, uid); LocalBroadcastManager.getInstance(getApplicationContext()) .sendBroadcast(broadcast); // Mark task completed taskCompleted(); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { Log.w(TAG, "download:FAILURE", exception); // Send failure broadcast Intent broadcast = new Intent(ACTION_ERROR); broadcast.putExtra(EXTRA_DOWNLOAD_PATH, downloadPath); LocalBroadcastManager.getInstance(getApplicationContext()) .sendBroadcast(broadcast); // Mark task completed taskCompleted(); } }); } } 

    Verwenden Sie benutzerdefinierte Listenadapter, um Listenansicht zu behandeln und um ImageView zu verarbeiten, verwenden Sie GLIDE, das einfache Methoden zum Laden von Bildern mit Speicherlink bietet.

    http://wptrafficanalyzer.in/blog/listview-with-images-and-text-using-simple-adapter-in-android/

    👆👆👆 Link zum Erstellen von Listenadapter mit und imageview und Textansicht

    https://firebase.google.com/docs/storage/android/download-files

    👆👆👆 Link zum Speichern von Firebase-Sorage-Bild in den externen Speicher

    Sie müssen nur das gewünschte Bild auf eine bestimmte Ansicht in der Listenansicht aufrufen

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.