Получение изображений из хранилища Firebase - PullRequest
0 голосов
/ 22 мая 2019

Я загрузил несколько фотографий в хранилище Firebase, и мне нужно соединить каждое из этих изображений с документом в моем облачном хранилище пожаров, а затем показать их в моем recyclerView. Получу ли я URL-адрес каждого изображения, добавлю поле «изображение» к каждому документу в пожарном депо и использую URL-адрес в качестве значения? И как мне поместить их в мой RecyclerView?

Я успешно получил другие данные из Firestore, используя FirestoreUI, однако я не уверен, как сделать то же самое для изображений.

RecyclerViewAdapter Class

public class FirebaseRecyclerViewAdapter extends 
FirestoreRecyclerAdapter<Buildings, 
FirebaseRecyclerViewAdapter.FirebaseRecyclerViewHolder> {

public FirebaseRecyclerViewAdapter(FirestoreRecyclerOptions<Buildings> 
options) {
    super(options);
}

@Override
protected void onBindViewHolder(FirebaseRecyclerViewHolder holder, int 
position, Buildings model) {
    holder.textViewName.setText(model.getName());
}

@NonNull
@Override
public FirebaseRecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup 
parent, int viewType) {
    View v = 
 LayoutInflater.from(parent.getContext()).inflate
(R.layout.buildings_row_item, parent, false);
    return new FirebaseRecyclerViewHolder(v);
}

class FirebaseRecyclerViewHolder extends RecyclerView.ViewHolder {
    TextView textViewName;

    public FirebaseRecyclerViewHolder(View itemView) {
        super(itemView);
        textViewName = itemView.findViewById(R.id.building_name);


    }
}
}

MainActivity Class

public class MainActivity extends AppCompatActivity {


private FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference buildingRef = db.collection("Building");
StorageReference storageReference = 
FirebaseStorage.getInstance().getReference();
private FirebaseRecyclerViewAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_2);

    setUpRecyclerView();


    getSupportActionBar().hide();
}

private void setUpRecyclerView() {

    Query query = buildingRef.orderBy("name", Query.Direction.DESCENDING);

    FirestoreRecyclerOptions<Buildings> options = new 
FirestoreRecyclerOptions.Builder<Buildings>()
            .setQuery(query, Buildings.class)
            .build();
    adapter = new FirebaseRecyclerViewAdapter(options);

    RecyclerView recyclerView = findViewById(R.id.recycler_view);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.setAdapter(adapter);

}

@Override
protected void onStart() {
    super.onStart();
    adapter.startListening();

}

@Override
protected void onStop() {
    super.onStop();
    adapter.stopListening();
}

}

1 Ответ

1 голос
/ 23 мая 2019

Прежде всего, вам нужно загрузить изображение, которое вы хотите, в хранилище Firestore, используя

StorageReference

, затем вы должны сохранить URL, используя

getDownloadUrl()

Следующим шагом является сохранение URL-адреса в поле в документе, а здесь пример

загрузка изображения

 private void uploadFile() {

    if (mImageUri != null) {
        StorageReference fileReference = mStorageRef.child(System.currentTimeMillis()
                + "." + getFileExtension(mImageUri));

        mUploadTask = fileReference.putFile(mImageUri)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                                          @Override
                                          public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                                              Toast.makeText(context, "Upload successful", Toast.LENGTH_LONG).show();
                                                fileReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                                                    @Override
                                                    public void onSuccess(Uri uri) {
                                                        image=new Images(mID+"",Objects.requireNonNull( uri.toString()));
                                                    }
                                                })
                                                .addOnFailureListener(new OnFailureListener() {
                                                    @Override
                                                    public void onFailure(@NonNull Exception e) {
                                                        Toast.makeText(context, "Upload Failed", Toast.LENGTH_LONG).show();
                                                    }
                                                });

                                          }
                                      }
                )

                .addOnFailureListener(e ->
                        Toast.makeText(context, e.getMessage(), Toast.LENGTH_SHORT).show())

        .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                Toast.makeText(context, "Uploading...", Toast.LENGTH_LONG).show();
            }
        });

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

    }


}

сохранить URL-адрес в документе Firestore

  if(!TextUtils.isEmpty(image.getmImageUrl()))
         mProperty  = new Property(mID, username,mCity ,mDesc,mPrice,noRooms,noBathrooms,address,date,area,parking,Objects.requireNonNull(image.getmImageUrl()));
    else
         mProperty = new Property(mID, username,mCity ,mDesc,mPrice,noRooms,noBathrooms,address,date,area,parking);
        db.collection("Property").document(mProperty.getmID() + "").set(mProperty)
                .addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Toast.makeText(context, "done",
                                Toast.LENGTH_SHORT).show();
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {

                        Toast.makeText(context, "Failed",
                                Toast.LENGTH_SHORT).show();
                    }
                });


        boolean flag;

    } else {
        mError.setText("Empty Fields");
        mError.setVisibility(View.VISIBLE);
    }

Я использую модель для вставки данных в Firestore, вы должны сделать это тоже

ив RecyclerAdapter вы можете привязать изображение к Recyclerview, используя либо Picasso, либо Bitmap

Picasso.get().load(model.getmImageDrawable()).
            fit().placeholder(R.drawable.placeholder_image).
            error(R.drawable.no_img).into(holder.mImage)
...