본문 바로가기
Android

로그인 후 채팅 방 만들기??

by noddu 2021. 4. 6.
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);


            }
        });

    }
}

 

 

배포하기

반응형