2016-12-04 1 views
2

안녕하십니까.Firebase 데이터베이스를 사용하여 RecyclerView 채우기

ImageView가있는 RecycleView를 채우려는 테스트 코드가 있습니다. ImageView는 Firebase Database의 URL에서 JPG 이미지로 채워집니다.

문제는 데이터를 가져 와서 recycleview를 채우는 방법을 얻지 못한다는 것입니다. Github에서 FirebaseUI를 읽었지만 진심으로이 응용 프로그램에 혼자 있기 때문에 진심으로 찾았습니다.

이는 MainActivity 코드 :

public class MainActivity extends AppCompatActivity{ 


    DatabaseReference mReference; 
    DatabaseReference mURLReference; 

    public FirebaseRecyclerAdapter<Pictures, PicturesHolder> mRecyclerViewAdapter; 
    //UI 
    RecyclerView mImagesRV; 
    LinearLayoutManager mManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 


     mReference = FirebaseDatabase.getInstance().getReference(); 
     mURLReference= mReference.child("Pictures Data"); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

      } 
     }); 

     mImagesRV=(RecyclerView)findViewById(R.id.recyclerView); 

     mManager=new LinearLayoutManager(this); 
     mManager.setReverseLayout(false); 

     mImagesRV.setHasFixedSize(false); 
     mImagesRV.setLayoutManager(mManager); 

    } 

    public void onAttachRecyclerView() 
    { 

     Query lastHundred = mURLReference.limitToLast(100); 
     mRecyclerViewAdapter = new FirebaseRecyclerAdapter<Pictures, PicturesHolder>(
       Pictures.class,R.layout.content_main,PicturesHolder.class, lastHundred 
     ) { 
      @Override 
      protected void populateViewHolder(PicturesHolder pictureView, Pictures pictures, int position) { 


      } 
     }; 
    } 
} 

이 내가 FirebaseDatabase에 데이터를 삽입하는 데 사용하는 개체입니다 (난 그냥 URL을 원하는) :

public class Pictures { 


    String pictureID; 
    String downloadURL; 
    double latitude; 
    double longitude; 

    public Pictures() { 

    } 

    public void setPictureID(String pictureID) { 
     this.pictureID = pictureID; 
    } 

    public void setDownloadURL(String downloadURL) { 
     this.downloadURL = downloadURL; 
    } 

    public void setLatitude(double latitude) { 
     this.latitude = latitude; 
    } 

    public void setLongitude(double longitude) { 
     this.longitude = longitude; 
    } 

    public String getPictureID() { 
     return pictureID; 
    } 

    public String getDownloadURL() { 
     return downloadURL; 
    } 

    public double getLatitude() { 
     return latitude; 
    } 

    public double getLongitude() { 
     return longitude; 
    } 
} 

을 그리고 이것은 ViewHolder입니다, 괜찮은지 모르겠다. ..

public class PicturesHolder extends RecyclerView.ViewHolder { 

    ImageView imageView; 

    public PicturesHolder(View itemView) 
    { 
     super(itemView); 
     imageView = (ImageView) itemView.findViewById(R.id.picture_view); 

    } 

    public void setImageView(ImageView imageView) { 
     this.imageView = imageView; 
    } 
} 

너희들에게서 좋은 충고를받는 것이 좋을거야! 정말 고마워요.

+0

음, 나는 firebase 데이터베이스를 사용한 적이 없지만 네트워킹에 무엇을 사용하고 있습니까? 나는 아무 것도 볼 수 없기 때문에. –

+0

먼저 그림에서 PictureHolder보기로 데이터를 복사하기 위해 populateViewHolder 구현을 제공해야합니다. 둘째, 당신은 아마도 PictureHolder에 뷰를 설정하는 메소드를 원하지 않을 것입니다. ViewHolders는 전달 된 itemView에서 발견 된 뷰에 대한 참조 만 추출합니다. 대신 다운로드 URL을 가져 와서 글라이드 (Glide)와 같은 것을 사용하여 이미지를 다운로드하여 ImageView에 저장하려고합니다. 마지막으로 RecyclerView의 작동 방식에 익숙하지 않은 경우 먼저 Firebase없이 간단한 예제를 수행하는 것이 좋습니다. –

답변

1

나는 내 RecyclerView에서 이미지를 채우기 위해 글라이드를 사용하고 있습니다. HTTP URL 인 String이 주어지면 Glide는 String을 해결하고 ImageView에 해당 HTTP 주소에있는 이미지를 표시합니다. ViewHolder에서

compile 'com.github.bumptech.glide:glide:3.7.0' 

이 (메소드 setImage를 만들 수) 이미지를 설정하는 글라이드를 사용 https://github.com/bumptech/glide

당신은 당신의 build.gradle에서 글라이드를 포함 할 필요가 : 여기

는 글라이드 수있는 링크입니다 : 당신이 당신의 viewholder에서 setImage() 메서드를 호출하고 인수로 getDownloadURL의 반환 값을 전달합니다 populateViewHolder에 그런
public static class PicturesHolder extends RecyclerView.ViewHolder { 
    Context ctx; 
    ImageView image; 

    public PicturesHolder(View v) { 
     super(v); 
     this.ctx = v.getContext(); 
     this.image = (ImageView) v.findViewById(R.id.myImageView); 
    } 

    public void setImage(String url) { 
     Glide.with(ctx) 
       .load(url) 
       .into(image); 
    } 
} 

() FR 귀하의 사진 모델 :

@Override 
    protected void populateViewHolder(PicturesHolder viewHolder, Pictures model, int position) { 
     viewHolder.setImage(model.getDownloadURL()); 
} 
+0

그것은 일했습니다, 당신은 천사입니다! 감사합니다. 감사합니다. –

관련 문제