@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.dialog_setting_cancel:
dialogListener.onNegativeClicked();
break;
case R.id.dialog_setting_ok:
SettingModel setting = new SettingModel(
menu.getText().toString().trim(),
Integer.parseInt(price.getText().toString().trim()),
place.getText().toString().trim(),
hour+"시 "+minute+"분"
);
dialogListener.onPositiveClicked(setting);
break;
}
}
MessageSettingDialog.java의 onClick 함수에서에서 구현합니다. 사용자가 채팅방 정보를 입력하고 설정 을 누르면 (dialog_setting_ok 인 경우), SettingModel의 객체를 생성합니다. SettingModel.java는 채팅방의 정보를 저장하는 클래스입니다. SettingModel 의 생성자는
public SettingModel(String menu, int price, String place, String time)
입니다. price.getText()
으로 사용자가 입력한 가격을 받아오고, 생성자를 이용해서 이를 SettingModel.java의 price 필드에 저장합니다.
public Map<String, Boolean> users = new HashMap<>();
ChatRoom.java에서 현재 채팅방에 있는 사용자를 HashMap 형태로 나타냅니다.
ChatRoom current_chatroom;
current_chatroom.users.size() //채팅방 인원수
DatabaseReference chatroomRef = FirebaseDatabase.getInstance().getReference().child("chatroom");
DatabaseReference userRef = FirebaseDatabase.getInstance().getReference().child("users");
DatabaseReference settingRef = FirebaseDatabase.getInstance().getReference().child("Setting");
채팅방 정보를 저장할 때 Firebase 실시간 데이터베이스를 이용합니다. 데이터베이스에서 데이터를 읽고 쓰려면 DabaseReference
의 인스턴스가 필요합니다
여기서 settingRef가 Setting의 하위 노드를 가리키고 있습니다. Setting이 채팅방 정보입니다
settingRef.orderByKey().equalTo(key).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot item : dataSnapshot.getChildren()) {
SettingModel setting = item.getValue(SettingModel.class);
info_menu.setText(setting.menu);
info_place.setText(setting.place);
setting.price = setting.price/current_chatroom.users.size();
info_price.setText(setting.price+"");
info_time.setText(setting.time);
Toast.makeText(MessageActivity.this, "메뉴가 설정되었습니다. 채팅방 정보를 확인하세요.", Toast.LENGTH_SHORT).show();
}
}
ValueEventListener는 데이터베이스에서 일어나는 모든 변화를 감지합니다.
onDataChange()
메소드를 사용하여 이벤트 발생 시점을 기준으로 지정된 경로에 있는 내용의 정적 스냅샷을 읽을 수 있습니다. 이 메소드는 리스너가 연결될 때 한 번 호출된 후 하위를 포함한 데이터가 변경될 때마다 다시 호출됩니다. 이 함수를 이용해서 데이터가 변경될 때, item.getValue(SettingModel.class)
로 SettingModel의 데이터를 가져옵니다.
(1인분 가격)=(총 가격)/(채팅방 인원수)으로 1인당 가격을 구하고 info_price에 저장합니다.
info_price.setText(setting.price);
info_price를 채팅방 정보에서 TextView로 나타내주면 됩니다
mapView = new MapView(this);
mapView.setDaumMapApiKey("7f79f8a60fed7aca35c2e2638c658363");
ViewGroup mapViewContainer = (ViewGroup) findViewById(R.id.map_view);
mapViewContainer.addView(mapView);
MapView 클래스 는 Daum 지도 화면을 보여주는 view class 입니다. 위 코드를 통해서 mapview를 띄웁니다.
`private void setMarkerOnMap(ChatRoom chatroom) { }` setMarkerOnMap 함수는 위도와 경도를 받아서 해당 위치에 마커를 표시하는 함수입니다. double latitude = chatroom.latitude; //위도
double longitude = chatroom.longitude; //경도
String title = chatroom.title; //채팅방 제목
MapPoint mapPoint = MapPoint.mapPointWithGeoCoord(latitude, longitude);
로 마커를 추가합니다.
if (chatroom.status.equals("yet")) {
marker.setMarkerType(MapPOIItem.MarkerType.BluePin);
marker.setSelectedMarkerType(MapPOIItem.MarkerType.RedPin);
} else if (chatroom.status.equals("full")) {
marker.setMarkerType(MapPOIItem.MarkerType.YellowPin);
marker.setSelectedMarkerType(MapPOIItem.MarkerType.YellowPin);
}
만약 chatRoom의 인원 수가 꽉 찬 경우라면("full"), 마커가 노란색으로 표시되고 들어갈 채팅방으로 들어갈 수 없습니다. 인원수가 차지 않은 경우("yet"), 선택하기 전에는 마커가 파란색으로 표시되고, 선택 후에는 빨간색으로 표시됩니다.
markers.add(marker);
마커들을 Makers 배열에 저장합니다.
mapView.addPOIItem(marker);
지도에 마커를 붙입니다.
-
유효정(hjyu94):
- 지도 관련 기능 구현
- 메인 화면에 지도 띄우기
- 지도 클릭해서 채팅방 만들기
- 채팅방 만든 후 마커 표시하기
- 채팅방의 인원수 정보에 따라 클릭 가능한 마커인지 구분하여 지도에 마커 찍기
- 각 메뉴별로 마커 모아보기
- 채팅방 설정 기능 - 설정 버튼 클릭 후 메뉴, 장소, 시간 정하기
- 채팅방 나가기 기능
- GPS를 이용하여 현재 위치 표시하기
- 로그아웃 기능
-
윤하은(Water-Silver):
- 파이어베이스 - 구글 로그인, 채팅방 데이터베이스 연동
- 구글 아이디를 이용하여 사용자를 식별하는 기능
- 지도의 위치 정보를 받아와 채팅방 생성시 채팅방 이름과 위치(위경도) 등의 정보를 저장 및 불러오기
- 시연 영상
-
서현주(seohsj):
- ppt 및 발표
- 중간 ppt
- 중간 발표
- 코드 분석 및 readme 파일 관리
- 알파 테스트
- 최종 발표
-
최윤영(ILoveSpongebob) :
- ppt 및 발표
- 중간 ppt(사전조사 부분)
- 코드 분석
- 알파 테스트
- 최종 ppt 제작 및 발표