【发布时间】:2023-03-10 16:35:01
【问题描述】:
所以我有一堆从 Firebase 检索的图像字符串路径。对于每个字符串,我想使用 Picasso 或 Glide 将该图像上传到 ImageView 中。 但是无论我做什么,图像都不会加载。该应用程序不会崩溃,只是 ImageView 是空白的。
这是我从 Firebase 数据库查询的代码。
//Firebase
mRef = new Firebase("https://frontier-e802a.firebaseio.com/");
Firebase cardReference = mRef.child("cards");
cardReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//Toast.makeText(getBaseContext(),String.valueOf(dataSnapshot),Toast.LENGTH_SHORT).show();
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
CardModel fireBaseCard = dataSnapshot1.getValue(CardModel.class);
testCardModelArray.add(fireBaseCard);
}
/*for(CardModel cardModel : testCardModelArray)
{
Toast.makeText(getBaseContext(),cardModel.getImages().get(cardModel.getImages().size()-1),Toast.LENGTH_SHORT).show();
}*/
setupCards();
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
adapter = new SwipeDeckAdapter(testCardModelArray, this);
private void setupCards()
{
testData = new ArrayList<>();
for (int i = 0; i < 10; i++) {
testData.add(String.valueOf(i));
}
adapter = new SwipeDeckAdapter(testCardModelArray, this);
if(cardStack != null)
{
cardStack.setAdapter(adapter);
}
cardStack.setCallback(new SwipeDeck.SwipeDeckCallback() {
@Override
public void cardSwipedLeft(long stableId) {
Log.i("ActivityCenter", "card was swiped left, position in adapter: " + stableId);
}
@Override
public void cardSwipedRight(long stableId) {
Log.i("ActivityCenter", "card was swiped right, position in adapter: " + stableId);
Toast.makeText(getBaseContext(),String.valueOf(stableId),Toast.LENGTH_SHORT).show();
}
@Override
public boolean isDragEnabled(long itemId) {
return dragCheckbox.isChecked();
}
});
cardStack.setLeftImage(R.id.left_image);
cardStack.setRightImage(R.id.right_image);
Button btn = (Button) findViewById(R.id.button_left);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cardStack.swipeTopCardLeft(500);
}
});
Button btn2 = (Button) findViewById(R.id.button_right);
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cardStack.swipeTopCardRight(180);
}
});
Button btn3 = (Button) findViewById(R.id.button_center);
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// testData.add("a sample string.");
// adapter.notifyDataSetChanged();
cardStack.unSwipeCard();
}
});
}
这是我尝试使用 Glide/Picasso 和 NOTHING WORKS 的适配器。真是令人沮丧。
public class SwipeDeckAdapter extends BaseAdapter
{
private List<CardModel> data;
private Context context;
public SwipeDeckAdapter(List<CardModel> data, Context context) {
this.data = data;
this.context = context;
}
@Override
public int getCount() {
return data.size();
}
//No idea how these getItem and getItemId are used.
@Override
public Object getItem(int position)
{
return data.get(position).getCardID();
}
//Not used at all
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null)
{
LayoutInflater inflater = getLayoutInflater();
// normally use a viewholder
v = inflater.inflate(R.layout.test_card2, parent, false);
}
//((TextView) v.findViewById(R.id.textView2)).setText(data.get(position));
ImageView imageView = (ImageView) v.findViewById(R.id.offer_image);
TextView textView = (TextView) v.findViewById(R.id.sample_text);
if(!data.get(position).getImages().isEmpty())
{
Glide.with(context).load(data.get(position).getImages().get(data.get(position).getImages().size()-1)).centerCrop().into(imageView);
String item = data.get(position).getCardName();
textView.setText(item);
}
else
{
Picasso.with(context).load(R.drawable.food).fit().centerCrop().into(imageView);
String item = data.get(position).getCardName();
textView.setText(item);
}
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("Layer type: ", Integer.toString(v.getLayerType()));
Log.i("Hardware Accel type:", Integer.toString(View.LAYER_TYPE_HARDWARE));
/*Intent i = new Intent(v.getContext(), BlankActivity.class);
v.getContext().startActivity(i);*/
}
});
return v;
}
}
希望你们能提供见解。而且我知道我成功查询了卡片,因为我能够遍历所有字符串并烤它们。
【问题讨论】:
-
setUpcard()方法是做什么的?你能发布那个代码吗 -
真的是你的文件路径
data.get(position).getImages().get(data.get(position).getImages().size()-1 )??? ...请检查。 -
我进入了setUpCard()方法。
-
所以
data.get(position)是cardModel(它是一个容器类)。然后我执行.Images(),它为我提供了该容器 cardModel 拥有的图像数组。然后我想获取该图像数组列表中的最后一张图像。所以我做getImages().get(data.get(position).getImages().size()-1)这将返回数组的最后一个图像。 -
你的 Uri 正确吗?
标签: android firebase-realtime-database android-imageview picasso android-glide