05.16 안드로이드-Volley 라이브러리 웹과 통신

최고고·2022년 5월 16일
0



Gradle파일에서 두번째 build.gradle

dependencies 태그에 안드로이드 디벨로퍼스에서 복사한 내용추가하기, 추가 후 sync now클릭해서 저장하기

메니페스트에서 권장한 추가 태그 작성


xml 실행 화면

java 파일

Button,EditText, RequestQueue, StringRequest 필드 선언

버튼 클릭시 sendRequest() 메소드 호출

  1. RequestQueue, url(요청 주소), StringRequest 객체 생성하기
    RequestQueue : 서버에 요청하는 객체
    StringRequest : 요청 시 필요한 문자열
    RequestQueue : Volley.newRequestQueue(this);
    서버에 요청할 주소 :
    String url = "http://172.30.1.24:8082/web/joinInsert.do";
    stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>(){ --->임시클래스 만듦
    매개변수 4개 : (통신방식(get,post),요청url주소, new 리스너(익명클래스)-응답시필요한부분 작성함)
  • 응답 데이터 받아오는 onResponse 메소드 오버라이딩
  • 보낼 데이터 저장하는 곳 : 해쉬맵 키,밸류 형태 Map<String, String> params = new HashMap<>(); params에 담아 보낸다 .put("키", value) key는 서버에서 지정한 name과 동일하게 보내야됨
package com.example.ex220516;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import com.android.volley.AuthFailureError;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.HttpHeaderParser;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {
    private Button btn_request;
    private RequestQueue requestQueue;          //서버에 요청하는 객체
    private StringRequest stringRequest;        //요청 시 필요한 문자열

    private EditText edt_id,edt_pw,edt_nick,edt_phone;      //회원정보가 담긴 EditText객체




    @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);
        edt_nick = findViewById(R.id.edt_nick);
        edt_phone = findViewById(R.id.edt_phone);

        btn_request = findViewById(R.id.btn_request);
        btn_request.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                sendRequest();


            }
        });

    }

    public void sendRequest(){
        //RequestQueue 객체 생성
        requestQueue = Volley.newRequestQueue(this);    // this==getApplicationContext();

        // 서버에 요청할 주소
        String url = "http://172.30.1.24:8082/web/joinInsert.do";

        // 1.객체만들고 요청 주소만듦

        // 요청시 필요한 문자열 객체 생성  매개변수  4개(통신방식(get,post),요청url주소, new 리스너(익명클래스)-응답시필요한부분 작성함)
        stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>(){
            // 응답데이터를 받아오는 곳
            // 응답시 데이터 받아오는 것 - 통신이 잘됐다면 로그캣에서 확인하게출력함
            @Override
            public void onResponse(String response) {
                Log.v("resultValue",response);

            }
        }, new Response.ErrorListener() {
            // 서버와의 연동 에러시 출력
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        }){
            @Override //response를 UTF8로 변경해주는 소스코드
            protected Response<String> parseNetworkResponse(NetworkResponse response) {
                try {
                    String utf8String = new String(response.data, "UTF-8");
                    return Response.success(utf8String, HttpHeaderParser.parseCacheHeaders(response));
                } catch (UnsupportedEncodingException e) {
                    // log error
                    return Response.error(new ParseError(e));
                } catch (Exception e) {
                    // log error
                    return Response.error(new ParseError(e));
                }
            }

            // 보낼 데이터를 저장하는 곳 해쉬맵에 저장해서 보냄 - key,value
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<>();
                String id = edt_id.getText().toString();
                String pw = edt_pw.getText().toString();
                String nick = edt_nick.getText().toString();
                String phone = edt_phone.getText().toString();


                params.put("id", id);
                params.put("pw",pw);
                params.put("nick",nick);
                params.put("phone",phone);
                // key값은 서버에서 지정한 name과 동일하게

                return params;
            }
        };
        stringRequest.setTag("main");       //구분자 어떤클라이언트에서 요청했는지 나타냄 (중요하지않음)
        requestQueue.add(stringRequest);        //실행 요청 add에 담으면 자동요청
    }


}


전에 만들어놓은 스프링을 사용하도록한다. 게시판페이지 내에서 회원가입 기능을 가져다 쓸거다. DB는 myBatis 로되어있음

  • DB연결 켜주고
  • 안드로이드에서 버튼을 클릭시 데이터를 전송하는데, 이클립스 콘솔창에서 잘 보여진다
  • 테이블에 잘 저장된 모습

0개의 댓글