Вы можете использовать следующий код. Здесь я загружаю изображение в хранилище firebase, а затем я сохраняю URL-адрес загрузки изображения в базу данных firebase.
//getting the storage reference
StorageReference sRef = storageReference.child(Constants.STORAGE_PATH_UPLOADS + System.currentTimeMillis() + "." + getFileExtension(filePath));
//adding the file to reference
sRef.putFile(filePath)
.addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
//dismissing the progress dialog
progressDialog.dismiss();
//displaying success toast
Toast.makeText(getApplicationContext(), "File Uploaded ", Toast.LENGTH_LONG).show();
//creating the upload object to store uploaded image details
Upload upload = new Upload(editTextName.getText().toString().trim(), taskSnapshot.getDownloadUrl().toString());
//adding an upload to firebase database
String uploadId = mDatabase.push().getKey();
mDatabase.child(uploadId).setValue(upload);
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
progressDialog.dismiss();
Toast.makeText(getApplicationContext(), exception.getMessage(), Toast.LENGTH_LONG).show();
}
})
.addOnProgressListener(new OnProgressListener() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
//displaying the upload progress
double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
progressDialog.setMessage("Uploaded " + ((int) progress) + "%...");
}
});
Теперь, чтобы получить все изображения, хранящиеся в базе данных firebase, вы можете использовать
//adding an event listener to fetch values
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
//dismissing the progress dialog
progressDialog.dismiss();
//iterating through all the values in database
for (DataSnapshot postSnapshot : snapshot.getChildren()) {
Upload upload = postSnapshot.getValue(Upload.class);
uploads.add(upload);
}
//creating adapter
adapter = new MyAdapter(getApplicationContext(), uploads);
//adding adapter to recyclerview
recyclerView.setAdapter(adapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
progressDialog.dismiss();
}
});
. Более подробную информацию вы можете увидеть в моем сообщении Пример хранения Firebase .
sizeof("f")
должен возвращать 2, один для «f» и один для завершения «\ 0». sizeof(foo)
возвращает 4 на 32-битной машине и 8 на 64-битная машина, потому что foo является указателем sizeof(bar)
возвращает 2, потому что bar представляет собой массив из двух символов, «b» и завершающий «\ 0». Строковый литерал имеет тип «массив размера N символа», где N включает в себя конечный нуль.
Помните, что массивы не распадаются на указатели при передаче в sizeof
.
sizeof
возвращает размер в байтах своего операнда. Это должно ответить на вопрос номер 1.;) Кроме того, строковый литерал имеет тип «array to n const char» при передаче в sizeof
.
Ваши тестовые примеры поочередно:
"f"
является строковым литералом, состоящим из двух символов, символа f
и завершающего NUL. foo
является указателем (редактирование: независимо от квалификаторов) и указатели кажутся 4 байтами в вашей системе .. bar
случай тот же, что и "f"
. Надеюсь, что это помогает.