gpt4 book ai didi

android - 从 Firebase 存储中检索图像 url 并放置在警报对话框中

转载 作者:搜寻专家 更新时间:2023-11-01 09:19:57 27 4
gpt4 key购买 nike

当用户注册时,个人资料图片会保存到 Firebase 存储中。我想要做的是从 firebase 的“用户/驱动程序”节点检索它(个人资料图片)并将其放在 AlertDialog 的 imageView 中。

这段代码有什么问题,它没有做它应该做的事?

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

最佳答案

您正在迭代该驱动程序特定节点的所有子节点。这根本不需要你可以直接使用图像 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 设置该位图。

关于android - 从 Firebase 存储中检索图像 url 并放置在警报对话框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56978863/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com