1

그래서 Firebase에서 검색하는 이미지 문자열 경로가 많습니다. 각 문자열에 대해 Picasso 또는 Glide를 사용하여 이미지를 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(); 
      } 
     }); 
    } 

가 여기에 내가 글라이드를 사용하려고 내 어댑터입니다/피카소와 아무것도 작동합니다. 너무 초조해.

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

파일에서 이미지 뷰 (글라이드)에 로딩 이미지 미리보기 :

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

그래, / –