【问题标题】:How to load image string path into an ImageView using Picasso or Glide library?如何使用 Picasso 或 Glide 库将图像字符串路径加载到 ImageView 中?
【发布时间】: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


【解决方案1】:

sn-p 用于将图像从文件加载到图像视图(滑动):

Glide.with(context)
    .load(new File(path)) 
    .into(imageView);

【讨论】:

    【解决方案2】:

    getItem 方法中,您必须返回 data.get(position) 而不是 data.get(position).getCardID();

    【讨论】:

    • 是的,我试过了,它不起作用。我给你们的代码正是我在课堂上所拥有的......仅此而已......再一次,它不会崩溃,卡片会在屏幕上弹出,但图像只是空白:/
    猜你喜欢
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 2017-12-17
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    相关资源
    最近更新 更多