Получение URL-адреса изображения из Firebase Storage и размещение в диалоге оповещений - PullRequest
2 голосов
/ 11 июля 2019

Когда пользователь регистрируется, изображение профиля сохраняется в базе данных Firebase.То, что я пытаюсь сделать, это извлечь его (профиль профиля) из узла «Пользователи / Драйверы» в firebase и поместить его в imageView в AlertDialog.

Что не так с этим кодом, что он не делаетчто он должен?

DatabaseReference driverArrivedRef = rootRef.child("Users/Drivers").child(driverId);
    driverArrivedRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            // get driver profile pic from database 'Users/Drivers'
            for (DataSnapshot ss : snapshot.getChildren()) {

                String imageUrl = ss.child("photoUrl").toString();

                DialogInterface.OnClickListener dialogClickListener = new DialogInterface
                        .OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        switch (which) {
                            case DialogInterface.BUTTON_POSITIVE:
                                //Yes button clicked
                                Toast.makeText(RiderHome.this, "Confirmed!",
                                        Toast.LENGTH_SHORT).show();
                                isRiderInVehicle();
                                dialog.dismiss();
                                break;

                            case DialogInterface.BUTTON_NEGATIVE:
                                //No button clicked
                                Toast.makeText(RiderHome.this, "Not Confirmed, Try Again.",
                                        Toast.LENGTH_SHORT).show();
                                dialog.cancel();
                                break;
                        }
                    }
                };

                AlertDialog.Builder builder = new AlertDialog.Builder(RiderHome.this);
                getImageBitmapFromURL(context, imageUrl); // code below
                builder.setTitle("Driver Has Arrived")
                        .setMessage("Please proceed to vehicle.")
                        .setPositiveButton("CONFIRM", dialogClickListener)
                        .setNegativeButton("CANCEL", dialogClickListener);

                AlertDialog alert = builder.create();
                alert.getWindow().setGravity(Gravity.CENTER);
                alert.show();
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

getImageBitmapFromURL ()

public static Bitmap getImageBitmapFromURL(final Context context, final String imageUrl){
    Log.e(TAG, "getImageBitmapFromURL");

    Bitmap imageBitmap = null;
    try {
        imageBitmap = new AsyncTask<Void, Void, Bitmap>() {
            @Override
            protected Bitmap doInBackground(Void... params) {
                try {
                    int targetHeight = 200;
                    int targetWidth = 200;

                    return Picasso.with(context).load(String.valueOf(imageUrl))
                            //.resize(targetWidth, targetHeight)
                            .placeholder(R.drawable.ic_default_user)
                            .get();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return null;
            }
        }.execute().get();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }
    return imageBitmap;
}

Firebase - узел Пользователи / Драйверы

Firebase - Users/Drivers node

1 Ответ

2 голосов
/ 11 июля 2019

Вы перебираете все дочерние элементы этого конкретного узла драйвера.Это вообще не нужно. Вы можете напрямую получить URL-адрес изображения, используя

String imageUrl = "";
if(snapshot.child("photoUrl").exists()) {
  imageUrl = snapshot.child("photoUrl").getValue().toString();
}

Таким образом, итоговый код в методе onDataChange выглядит следующим образом:

    @Override
    public void onDataChange(DataSnapshot snapshot) {

            String imageUrl = "";
            If(snapshot.child("photoUrl").exists()) {
              imageUrl = snapshot.child("photoUrl").getValue().toString();
            }

            DialogInterface.OnClickListener dialogClickListener = new DialogInterface
                    .OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    switch (which) {
                        case DialogInterface.BUTTON_POSITIVE:
                            //Yes button clicked
                            Toast.makeText(RiderHome.this, "Confirmed!",
                                    Toast.LENGTH_SHORT).show();
                            isRiderInVehicle();
                            dialog.dismiss();
                            break;

                        case DialogInterface.BUTTON_NEGATIVE:
                            //No button clicked
                            Toast.makeText(RiderHome.this, "Not Confirmed, Try Again.",
                                    Toast.LENGTH_SHORT).show();
                            dialog.cancel();
                            break;
                    }
                }
            };

            AlertDialog.Builder builder = new AlertDialog.Builder(RiderHome.this);
            getImageBitmapFromURL(context, imageUrl); // code below
            builder.setTitle("Driver Has Arrived")
                    .setMessage("Please proceed to vehicle.")
                    .setPositiveButton("CONFIRM", dialogClickListener)
                    .setNegativeButton("CANCEL", dialogClickListener);

            AlertDialog alert = builder.create();
            alert.getWindow().setGravity(Gravity.CENTER);
            alert.show();
    }

Кстати, вызовполучить растровое изображение из imageURL является асинхронным.Поэтому вам нужно подождать, пока этот код вернет растровое изображение, а затем установить это растровое изображение с помощью imageView внутри диалога.

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