Firebase
mainActivity
addChildEventListener로 접근 해야한다
message경로 안 데이터에 접근이냐
그 안에 또 다른 데이터에 접근이냐
에 따라 이벤트 메소드가 다르다!
value vs child
myRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
PersonVO value = snapshot.getValue(PersonVO.class);
Log.d(TAG,"Value is "+value);
}
① 객체 선언
Context context;
int layout;
ArrayList<ChatVO> list;
LayoutInflater inflater; //xml->view로 변환★
② 생성자 만들기
public ChatAdapter(Context context, int layout, ArrayList<ChatVO> list) {
this.context = context;
this.layout = layout;
this.list = list;
//inflater 초기화 이걸 초기화해줘야 xml > view로 변환 가능★
this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
③
@Override
//list.size를 넣어야 데이터를 갯수만큼 생성해서 보여주기 가능
public int getCount() {
return list.size();
}
@Override
//데이터를 담아주니까
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
④ findview
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
//i가 하는 역할은 인덱스 위치!
//view는 아이템 레이아웃을 모두 가진 부모 레이아웃(리스트뷰)
//로직 구현 시작!
//1.뷰 초기화
if(view == null){
//view는 chat_item.xml의 정보를 가진 객체
view = inflater.inflate(layout,viewGroup,false);
}
ImageView imgOther = view.findViewById(R.id.imgOther);
TextView tvOtherNm = view.findViewById(R.id.tvOtherNm);
TextView tvOtherMsg = view.findViewById(R.id.tvOtherMsg);
TextView tvOtherTime = view.findViewById(R.id.tvOtherTime);
TextView tvMyMsg = view.findViewById(R.id.tvMyMsg);
TextView tvMyTime = view.findViewById(R.id.tvMyTime);
return view;
}
⑤Chatvo 구현
ChatVO vo = list.get(position);
imgOther.setImageResource(vo.getImgId());
tvOtherNm.setText(vo.getName());
tvOtherMsg.setText(vo.getMsg());
tvMyTime.setText(vo.getTime());
tvMyMsg.setText(vo.getMsg());
tvMyTime.setText(vo.getTime());
ChatActivity
①
ListView ChatList;
ChatAdapter adapter;
ArrayList<ChatVO> list;
EditText edtMsg;
Button btnSend;
②
ChatList = findViewById(R.id.ChatList);
edtMsg = findViewById(R.id.edtMsg);
btnSend = findViewById(R.id.btnSend);
list = new ArrayList<>();
③
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("talk");
④ 3전
String currentId = getIntent().getStringExtra("login_id");
Log.d("CharActivity","현재 로그인한 아이디 : "+currentId);
⑤ db 저장
//1.버튼 클릭 시 입력된 메세지를 파이어베이스 데이터베이스에 저장
btnSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String msg = edtMsg.getText().toString();
//저장시 채워넣는 push
myRef.push().setValue(new ChatVO(R.drawable.ic_launcher_background,
currentId,
msg,
"10:25"));
}
});
⑥ list객체에 저장
⑦
⑧