본문 바로가기

ANDROID

파이어베이스 & recyclerview 사용 방법

1. 파이어 베이스에 데이터 저장하기

 

-  HashMap 사용하기

  저장할 값을 키와 값으로 구분해 테이블 형식으로 한번에 저장할 수 있다.

 

최종 저장하게될 데이터

//테이블 만들기
HashMap<Object, String> hashMap = new HashMap<>();
hashMap.put("uid", uid);
hashMap.put("mgetspeed", Double.toString(speed));
hashMap.put("mcalspeed", Double.toString( Double.parseDouble(String.format("%.3f", calspeed))));
hashMap.put("mdistance", Double.toString(distance));
hashMap.put("mtimediff", Double.toString(diff));

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("RecordSpeed");
ref.push().setValue(hashMap)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(getActivity(), "recordSpeed", Toast.LENGTH_SHORT).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getActivity(), "Fail_recordSpeed", Toast.LENGTH_SHORT).show();
}
});

 

FirebaseDatabase.getInstance().getReference("RecordSpeed"); 는 저장하게 될 곳을 설정하는 것이다.

만약 RecordSpeed라는 곳이 없으면 새로 생성되어 그 밑에 테이블이 저장된다.

 

 

2. RecyclerView에 파이어 베이스 데이터 불러오기

  2.1 model.class

  필수 클래스는 아니다. 하지만 객체 모델을 클래스로 정의된 리스트에 담아서 한번에 다룰 수 있다.

 

  tip! getterandsetter와 constructor 자동 생성은 alt+insert를 누르면 된다!

 

  ※  - 여기서 주의할 점은 내가 저장한 파이어베이스의 키 값과 model의 변수 값이 같아야한다. 아니면 불러올 때 해 

        당 키 값을 찾지 못하고 null로 반환된다.

 

      - 생성자를 꼭 밑에와 같이 설정해 줘라. 아니면 오류!

 

 

public class recordmodel {
    String mgetspeed;
    String mcalspeed;
    String mstepCount;
    String mtimediff;
    String mdistance;

    public recordmodel(){

    }
    public recordmodel(String mdistance, String mcalspeed, String mgetspeed, String mtimediff,String uid) {
        this.mdistance = mdistance;
        this.mcalspeed = mcalspeed;
        this.mgetspeed = mgetspeed;
        this.mtimediff = mtimediff;
        this.uid = uid;
    }

    public String getMgetSpeed() { return mgetspeed;}

    public void setMgetSpeed(String mgetSpeed) {
        this.mgetspeed = mgetSpeed;
    }

    public String getMcalSpeed() {
        return mcalspeed;
    }

    public void setMcalSpeed(String mcalSpeed) {
        this.mcalspeed = mcalSpeed;
    }

    public String getMstepCount() {
        return mstepCount;
    }

    public void setMstepCount(String mstepCount) {
        this.mstepCount = mstepCount;
    }

    public String getMtime() {
        return mtimediff;
    }

    public void setMtime(String mtimediff) {
        this.mtimediff = mtimediff;
    }

    public String getMdistance() {
        return mdistance;
    }

    public void setMdistance(String mdistance) {
        this.mdistance = mdistance;
    }

    public String getUid() {
        return uid;
    }

    public void setUid(String uid) {
        this.uid = uid;
    }

    String uid;


}

  2.1 Adapter.class

 

   - RecyclerView.Adpter를 상속받아 클래스를 정의한다.

   - ViewHolder : RecyclerView.ViewHolder 클래스를 상속 받으며 재사용을 위해 뷰를 연결한다.

   - 내부클래스에 RecyclerView.Holder를 상속

     이곳에 행에 넣을 데이터 변수들을 설정해준다.

   - onBindViewHolder 를 주목

     한 행에 들어갈 데이터를 set하기 때문이다.

 

* 데이터 집합을 관리하고 뷰를 생성*/
public class AdapterSpeed extends RecyclerView.Adapter<AdapterSpeed.MyHolder> {

    Context context;
    List<recordmodel> RecordModellist;
    String Uid;

    public AdapterSpeed(Context context, List<recordmodel> recordModellist) {
        this.context = context;
        this.RecordModellist = recordModellist;
        Uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
    }


    @NonNull
    //아이템 뷰를 관리하는 viewHolder 객체 생성
    public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(context).inflate(R.layout.row_recordspeed,parent,false);
        return new AdapterSpeed.MyHolder(view);
    }
    //position에 해당하는 데이터를 viewholder가 관리하는 view에 바인딩
    @Override
    public void onBindViewHolder(@NonNull MyHolder myHolder, int i) {
        final String uid = RecordModellist.get(i).getUid();
        final String getspeed = RecordModellist.get(i).getMgetSpeed();
        final String calspeed = RecordModellist.get(i).getMcalSpeed();
        final String getdistance = RecordModellist.get(i).getMdistance();
        final String gettimegab = RecordModellist.get(i).getMtime();

        Log.d(uid, " " + getspeed+" "+ calspeed+" " + getdistance+" " + gettimegab+ " ");
        if(getspeed!=null) {

            myHolder.mGetspeed.setText(getspeed);
            myHolder.mCalspeed.setText(calspeed);
            myHolder.mDistance.setText(getdistance);
            myHolder.mTimegab.setText(gettimegab);
        }
    }

    @Override
    public int getItemCount() {

        return RecordModellist.size();
    }

    //각 list에 들어갈 객체의 맴버 변수
    class MyHolder extends RecyclerView.ViewHolder{
        TextView mGetspeed, mCalspeed, mTimegab, mDistance;

        public MyHolder(View itemView) {

            super(itemView);

            mGetspeed = itemView.findViewById(R.id.speedtxt);
            mCalspeed = itemView.findViewById(R.id.calSpeedtxt);
            mTimegab = itemView.findViewById(R.id.timegabtxt);
            mDistance = itemView.findViewById(R.id.disttxt);


        }


    }

}

 

3. 데이터를 RecyclerView로 불러오기

   recormodel : 데이터들이 클래스 객체로 만들어진  model.class

   RecordModellist : List<recordmodel> RecordModellist = new ArrayList<>() 즉, model클래스 객체들이 리스트

                           로 모여질 곳.

   

 private void loadRecordSpeed() {
        final DatabaseReference ref = FirebaseDatabase.getInstance().getReference("RecordSpeed");
        ref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                RecordModellist.clear();
                   for(DataSnapshot ds : dataSnapshot.getChildren()) {
                        //데이터를 담기위한 객체 모델
                       recordmodel Recordmodel = ds.getValue(recordmodel.class);
                       //이 객체를 리스트에 넣는다.
                       RecordModellist.add(Recordmodel);
                       //이 리스트들을 어댑터에 넣어진다.
                       adapterSpeed = new AdapterSpeed(getActivity(), RecordModellist);
                       RecordrecyclerView.setAdapter(adapterSpeed);
                   }
                }

 

참고 블로그 : https://wickies.tistory.com/94

 

[Android] RecyclerView 개요 및 예제, 성능 관리 팁

본 포스팅은 스터디 모임의 발표 참고자료로 사용하기 위해 작성되었습니다. RecyclerView 1. 개요 - Android 5.0에서 처음 소개되었으며 기존의 ListView를 보완한 고급 위젯 - Data Set을 아이템 단위로 ViewGro..

wickies.tistory.com

 

'ANDROID' 카테고리의 다른 글

대세인 MVVM 에 대해서  (0) 2020.06.20
[Android] 만보기 만들기  (2) 2020.01.08
[Firebase + Android] 회원가입과 로그인 구현  (8) 2020.01.06