728x90
반응형
◆Main Activity -> onResponse 메소드에
@Override
public void onResponse(String response) {
// 서버에서 돌려준 응답을 처리
if (response.equals("true")){
Toast.makeText(getApplicationContext(),"성공ㅋ",Toast.LENGTH_SHORT).show();
// finish(); - finish 하면 성공하고 앱 종료됨
Intent intent = new Intent(MainActivity.this, ChatActivity.class);
intent.putExtra("id", edt_id.getText().toString());
startActivity(intent);
// 한번에 작성해도됨
// startActivity(new Intent(MainActivity.this, ChatActivity.class).putExtra("id", edt_id.getText().toString()));
}else {
Toast.makeText(getApplicationContext(),"실패ㅋ",Toast.LENGTH_SHORT).show();
}
}
◆ChatVO.java
public class ChatVO {
private int img;
private String name;
private String msg;
private String time;
public ChatVO(){
}
public ChatVO(int img, String name, String msg, String time) {
this.img = img;
this.name = name;
this.msg = msg;
this.time = time;
}
public int getImg() {
return img;
}
public String getName() {
return name;
}
public String getMsg() {
return msg;
}
public String getTime() {
return time;
}
}
◆ChatActivity.java
public class ChatActivity extends AppCompatActivity {
// 임시 채팅데이터 생성
ArrayList<ChatVO> data = new ArrayList<>();
String login_id = null; // 현재 로그인 한 사람의 id
TextView tv_id;
ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
tv_id = findViewById(R.id.tv_id);
lv = findViewById(R.id.listView);
login_id = getIntent().getStringExtra("id"); // 로그인페이지에서 로그인 한 사람 아이디 가져와서
tv_id.setText(login_id); // 그 아이디로 set 해주기
data.add(new ChatVO(R.drawable.a1,"dPsk","안녕하세요","09:58"));
data.add(new ChatVO(R.drawable.a2,"dydanr","네 반가워요","09:58"));
data.add(new ChatVO(R.drawable.a1,"dPsk","날씨 좋네","09:58"));
data.add(new ChatVO(R.drawable.a3,"tkdcjf","어쩌라고","09:58"));
data.add(new ChatVO(R.drawable.a4,"tmddnjs","ㅇㅈ","09:58"));
data.add(new ChatVO(R.drawable.a4,"tmddnjs","어쩔ㅡㅡ","09:58"));
ChatAdatper adatper = new ChatAdatper(getApplicationContext(), R.layout.chatlist, data,login_id);
lv.setAdapter(adatper);
}
}
◆ChatAdapter.java
public class ChatAdatper extends BaseAdapter {
Context c;
int layout;
ArrayList<ChatVO> data;
LayoutInflater inflater;
String id; // 현재 로그인한 아이디
public ChatAdatper(Context c, int layout, ArrayList<ChatVO> data, String id) {
this.c = c;
this.layout = layout;
this.data = data;
this.inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.id = id; // 현재 로그인한 아이디
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null){
convertView = inflater.inflate(layout, parent, false);
}
// 내가 보낸 메세지를 적을 말풍선
TextView tv_mymsg = convertView.findViewById(R.id.tv_mymsg);
TextView tv_mytime = convertView.findViewById(R.id.tv_mytime);
// 남이 보낸 메세지를 적을 말풍선
TextView tv_othermsg = convertView.findViewById(R.id.tv_othermsg);
TextView tv_othername = convertView.findViewById(R.id.tv_othername);
TextView tv_otherTime = convertView.findViewById(R.id.tv_othertime);
ImageView imageView = convertView.findViewById(R.id.img);
// 만약에 현재 메세지가 내가 보낸 메세지라면
// 오른쪽 말풍선만 Visible, 왼쪽 말풍선은 GONE
if(data.get(position).getName().equals(id)){
tv_mymsg.setVisibility(View.VISIBLE);
tv_mytime.setVisibility(View.VISIBLE);
tv_othermsg.setVisibility(View.GONE);
tv_othername.setVisibility(View.GONE);
tv_otherTime.setVisibility(View.GONE);
imageView.setVisibility(View.GONE);
tv_mymsg.setText(data.get(position).getMsg());
tv_mytime.setText(data.get(position).getTime());
}else { // 남이 보낸 메세지 일때
tv_mymsg.setVisibility(View.GONE);
tv_mytime.setVisibility(View.GONE);
tv_othermsg.setVisibility(View.VISIBLE);
tv_othername.setVisibility(View.VISIBLE);
tv_otherTime.setVisibility(View.VISIBLE);
imageView.setVisibility(View.VISIBLE);
tv_othermsg.setText(data.get(position).getMsg());
tv_othername.setText(data.get(position).getName());
tv_otherTime.setText(data.get(position).getTime());
imageView.setImageResource(data.get(position).getImg());
}
return convertView;
}
}
◆실시간 데이터베이스 Firebase 사용하기
Save and retriece data 누르면
실행 해야할 순서들이 나옴
1단계 Firebase와 연동 하기 ( 웹에서 프로젝트 생성 후 연결 )
2단계 Realtime Database 소스코드 추가하기
◆MainActivity.java
public class MainActivity extends AppCompatActivity {
Button btn_join, btn_login;
EditText edt_id, edt_pw;
RequestQueue requestQueue; // 서버와 통신할 통로
StringRequest stringRequest; // 내가 전송할 데이터
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edt_id = findViewById(R.id.edt_id);
edt_pw = findViewById(R.id.edt_pw);
btn_join = findViewById(R.id.btn_join);
btn_login = findViewById(R.id.btn_login);
String url = "http://211.48.213.190:8081/MemberServer/LoginServlet";
requestQueue = Volley.newRequestQueue(getApplicationContext());
stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// 서버에서 돌려준 응답을 처리
if (response.equals("true")){
Toast.makeText(getApplicationContext(),"성공ㅋ",Toast.LENGTH_SHORT).show();
// finish(); - finish 하면 성공하고 앱 종료됨
Intent intent = new Intent(MainActivity.this, ChatActivity.class);
intent.putExtra("id", edt_id.getText().toString());
startActivity(intent);
// 한번에 작성해도됨
// startActivity(new Intent(MainActivity.this, ChatActivity.class).putExtra("id", edt_id.getText().toString()));
}else {
Toast.makeText(getApplicationContext(),"실패ㅋ",Toast.LENGTH_SHORT).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// error.toString(); 하면 에러 찍힘
}
}){
// StringRequest 객체 범위
@Nullable
@Override
protected Map<String, String> getParams() throws AuthFailureError {
// 전송할 데이터 Key, Value 로 셋팅하기
Map<String, String> temp = new HashMap<>();
temp.put("id",edt_id.getText().toString()); // put - 인덱스따라 추가가아니라 집어넣는느낌
temp.put("pw",edt_pw.getText().toString());
return temp;
}
};
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 서버로 stringRequest 쏘기
requestQueue.add(stringRequest);
}
});
// join 버튼 누르면 joinActivity 로 이동
btn_join.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, JoinActivity.class);
// 두번째 액티비티 실행시키고
// 두번째 액티비티에서 서버랑 통신
startActivity(intent);
}
});
}
}
배포하기
반응형
'Android' 카테고리의 다른 글
[Android/Java] Git연동과 findViewById 에러 (0) | 2022.01.04 |
---|---|
fragment (0) | 2021.04.06 |
서버 통신 로그인 DB연동( Volley 라이브러리 ) (0) | 2021.04.03 |
Custom ListView + DB연동하기 ( SQLite ) (0) | 2021.04.03 |
Adapter -> Custom ListView활용 (0) | 2021.03.25 |