1

私はFirebaseから取得しているイメージ文字列のパスをたくさん持っています。そして各文字列について、ピカソまたはグライドを使用してそのイメージをImageViewにアップロードしたいと思います。 BUT私が何をしても、画像は決して読み込まれません。アプリがクラッシュすることはなく、ImageViewが空白になっているだけです。PicassoまたはGlideライブラリを使用して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(); 
      } 
     }); 
    } 

は、ここで私はグライドを使用しようとしています私のアダプタです/ピカソとNOTHINGはワークス。それはとてもイライラしています。

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; 
     } 
    } 

皆さんは洞察力を提供できると願っています。そして、私はカードの質問に成功したことを知っています。なぜなら、私はすべての弦をループしてトーストすることができたからです。

+0

何 'setUpcard()'メソッドはありますか?あなたはそのコードを投稿できますか? –

+0

本当にあなたのファイルパス 'data.get(position).getImages().get(data.get(position).getImages()。size() - 1)' ??? ... チェックしてください。 –

+0

私はsetUpCard()メソッドを入力しました。 –

答えて

1

あなたはgetItem方法あなたがdata.get(位置)を返さなければならないで代わりにdata.get(位置).getCardIDの();

+0

うん、私はそれを試みた、それは動作していませんでした。私があなたに与えたコードはまさに私がクラスのために持っているものです...何もない..再び、それはクラッシュせず、カードは画面上にポップアップしますが、画像は空白です:/ –

2

ファイルからImageViewの(グライド)にロードするイメージのためのスニペット:

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

ええ、 / –

関連する問題