https://corikachu.github.io/articles/android/firebase/android-firebase-realtime-chatting-app
버젼관련 버그도 존재한다. 주의하자. 버젼을 firebase 똑같은 것으로 셋팅해야한다.
생겼던 버그 -최신 버젼으로 맞추자.
//①. Firebase의 데이터 위치를 참조하기 위한 객체이다.
private FirebaseDatabase mFirebaseDatabase;
private DatabaseReference mDatabaseReference;
//리싸이클러 뷰 등장이요. 뷰를 전부다 넣는다.`
RecyclerView recyclerView;
EditText editText;
Button button;
//리싸이클러뷰에 셋팅할 채팅 아답터이다.
ChatAdapter chatAdapter;
private ChildEventListener mChildEventListener;
private ArrayAdapter<String> mAdapter;
private ListView mListView;
private EditText mEdtMessage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
recyclerView = findViewById(R.id.recyclerView);
editText = findViewById(R.id.editText);
button = findViewById(R.id.send);
//리싸이클러뷰에 할당할 채팅 아답터이다.
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(layoutManager);
chatAdapter = new ChatAdapter();
recyclerView.setAdapter(chatAdapter);
mFirebaseDatabase = FirebaseDatabase.getInstance();
mDatabaseReference = mFirebaseDatabase.getReference();
final String username = "고길동";
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ChatData chatData = new ChatData(username, editText.getText().toString());
mDatabaseReference.child("message").push().setValue(chatData);
editText.setText("");
}
});
mDatabaseReference.child("message").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
ChatData chatData = dataSnapshot.getValue(ChatData.class);
chatAdapter.addItem(chatData);
chatAdapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
class ChatAdapter extends RecyclerView.Adapter<ViewHolder> {
//자료가 추가되는 핵심적인 부분... 채팅매시지가 오기 때문에
//ArrayList는 채팅메시지형식이 되어야 한다.
ArrayList<ChatData> items = new ArrayList<>();
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
View itemView = inflater.inflate(R.layout.msg_item, viewGroup, false);
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
ChatData item = items.get(i);
viewHolder.setItem(item);
}
@Override
public int getItemCount() {
return items.size();
}
public void addItem(ChatData item){
items.add(item);
}
public void removeItem(ChatData item){
items.remove(item);
}
public void setItems(ArrayList<ChatData> items){
this.items = items;
}
}
https://code.tutsplus.com/tutorials/how-to-create-an-android-chat-app-using-firebase--cms-27397
new FirebaseListAdapter<ChatMessage>(this, ChatMessage.class,
R.layout.message, FirebaseDatabase.getInstance().getReference()) {
FirebaseListAdapter을 사용한다
체크~!!!!!!!!!!!!! 이꾸요잇~~~~~~~~~~~~~~~~~
https://anhana.tistory.com/5?category=701004
'프로그래밍 일반 > 안드로이드' 카테고리의 다른 글
Permission관련 (0) | 2020.03.27 |
---|---|
리스너와 콜백의 차이 (1) | 2020.03.27 |
[안드로이드] SurfaceView관련 자료, Barcode Detection자료 (0) | 2020.03.26 |
컨텐츠 프로바이더 작성시 참고할만한 자료 (0) | 2020.03.26 |
Bitmap을 String으로 관련 정보 (0) | 2020.03.26 |