Что может быть хорошим способом получения и отображения пользовательских изображений, которые хранятся в хранилище Firebase? - PullRequest
3 голосов
/ 12 июня 2019

Я создаю приложение для Android, которое отображает информацию профиля пользователя.Я могу хранить изображения в облачном хранилище, но я не уверен, как извлечь и отобразить изображения пользователя, хранящиеся в облачном хранилище.

Одна из основных проблем, с которыми я сталкиваюсь, заключается в том, чтоuser.getPhotoUrl() не дает мне правильное URI.Это дает мне что-то в форме com.google.android.gms.и т. д.

Я пытался использовать Glide для отображения изображений.Но это не сработало, так как я получал исключение FileNotFoundException.Итак, я попытался использовать Glide с StorageReference.

Но проблема с использованием StorageReference заключается в том, что я должен явно указать URI изображения, в то время как я хочу получить изображение, специфичное для пользователя.

Я ожидал, что выбранное пользователем изображение профиля появится на странице профиля, но когда я запускаю приложение в Android Studio, ничего не появляется.

1 Ответ

0 голосов
/ 12 июня 2019

Я написал метод, который загружает растровое изображение в хранилище Firebase в Android и получает его URL, пожалуйста, используйте этот метод для загрузки изображения и получения URL, После этого дайте мне знать, если у вас возникли проблемы.

public static void UploadBitmap(Activity activity, Bitmap bitmap, String serverFileName) {

        if (bitmap == null) {
            return;
        }

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {

                FirebaseStorage storage = FirebaseStorage.getInstance();
                StorageReference storageRef = storage.getReference();
                // Create a reference to the file you want to upload
                String directory = "images/";

                StorageReference fileRef = storageRef.child(directory + serverFileName);

                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
                byte[] data = stream.toByteArray();

                activity.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {


                        UploadTask uploadTask = fileRef.putBytes(data);
                        uploadTask.addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception exception) {
                                // Handle unsuccessful uploads
                                Log.e("oops","error in bitmap uploading");

                            }
                        }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                            @Override
                            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                                // taskSnapshot.getMetadata() contains file metadata such as size, content-type, etc.
                                // ...
                                // now download url first
                            }
                        });

                        Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
                            @Override
                            public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
                                if (!task.isSuccessful()) {
                                    throw task.getException();
                                }

                                // Continue with the task to get the download URL
                                return fileRef.getDownloadUrl();
                            }
                        }).addOnCompleteListener(new OnCompleteListener<Uri>() {
                            @Override
                            public void onComplete(@NonNull Task<Uri> task) {
                                if (task.isSuccessful()) {
                                    Uri downloadUri = task.getResult();
                                    String stringUrl = downloadUri.toString();

                                    // Great image is uploaded and url is here, you can load image anywhere via this stringUrl with Glide or Picasso.

                                } else {
                                    // Handle unsuccessful uploads
                                    Log.e("oops","error in url retrieval");
                                }
                            }
                        });


                    }
                });


            }
        });
        thread.start();




    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...