ruriruriya

[Android] 안드로이드 - Volley 라이브러리를 이용한 POST 통신 방법 (body에 json 보내기) 본문

🤖Android

[Android] 안드로이드 - Volley 라이브러리를 이용한 POST 통신 방법 (body에 json 보내기)

루리야ㅑ 2024. 1. 3. 17:15
반응형

Volley 라이브러리를 활용해서 POST 방식으로 body에 json을 보내보자.
파파고 API로 진행한다.

 

1. 버튼 생성 및 setOnClickListener 함수 생성

버튼을 만들고 setOnClickListener 함수를 만든다.
그리고 onClick 함수 오버라이딩

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    }
        
});

 

2. 정보 가져오기

어떤 언어로 번역할지 정보를 가져온다.

public void onClick(View v) {
    // 1. 어떤 언어로 번역할 지의 정보를 가져온다.
    int radioButtonId = radioGroup.getCheckedRadioButtonId();

    target = "";

    if (radioButtonId == R.id.radioBtn1) {
        // 영어
        target = "ko";

    } else if (radioButtonId == R.id.radioBtn2) {
        // 중국어 간체
        target = "zh-CN";

    } else if (radioButtonId == R.id.radioBtn3) {
        // 중국어 번체
        target = "zh-TW";

    } else if (radioButtonId == R.id.radioBtn4) {

        // 태국어
        target = "th";

    } else {
        Toast.makeText(MainActivity.this, "번역할 언어를 선택하세요.", Toast.LENGTH_SHORT).show();
        return;
    }

 

3. 번역할 문자 가져오기.

번역할 텍스트를 쓰면 가져오는 부분이다.
문장을 입력하지 않았을 경우를 대비해 Toast 안내문구도 만든다.

sentence = editText.getText().toString().trim();

if (sentence.isEmpty()) {
    Toast.makeText(MainActivity.this, "문장을 입력하세요.", Toast.LENGTH_SHORT).show();
    return;

}

 

4. body에 json 보내기

파파고 API 호출해서 body에 들어갈 데이터를 보낸다.
그리고 화면에 보여줄 때 최신데이터가 위에 올 수 있도록 한다.

RequestQueue queue = Volley.newRequestQueue(MainActivity.this);

String url = "https://openapi.naver.com/v1/papago/n2mt";

JSONObject body = new JSONObject();
try {
    body.put("source", "en");
    body.put("target", target);
    body.put("text", sentence);
} catch (JSONException e) {
    // 유저한테 에러 알려주기
    return;
}

JsonObjectRequest request = new JsonObjectRequest(
        Request.Method.POST,
        url,
        body,// body에 들어갈 데이터
        new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    String result = response.getJSONObject("message").getJSONObject("result").getString("translatedText");

                    txtResult.setText(result);

                    History history = new History(sentence, result, target);
                    historyArrayList.add(0,history); // 최신이 첫번 째에 나오도록.



                } catch (JSONException ex) {
                    // 유저에게 에러 알려주기
                    return;
                }
            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }

);

 

5. 네이버 시크릿 키 header 삽입

JsonObjectRequest의 파라미터 뒤에 작성한다.

RequestQueue queue = Volley.newRequestQueue(MainActivity.this);

String url = "https://openapi.naver.com/v1/papago/n2mt";

JSONObject body = new JSONObject();
try {
    body.put("source", "en");
    body.put("target", target);
    body.put("text", sentence);
} catch (JSONException e) {
    // 유저한테 알려주고
    return;
}

JsonObjectRequest request = new JsonObjectRequest(
        Request.Method.POST,
        url,
        body,// body에 들어갈 데이터
        new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    String result = response.getJSONObject("message").getJSONObject("result").getString("translatedText");

                    txtResult.setText(result);

                    History history = new History(sentence, result, target);
                    historyArrayList.add(0,history); // 최신이 첫번 째에 나오도록.



                } catch (JSONException ex) {
                    // 유저에게 알리고
                    return;
                }
            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }

) {
    // 네이버 시크릿 키. header 삽입


    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        Map<String, String> headers = new HashMap<>();
        headers.put("X-Naver-Client-Id", Config.X_NAVER_CLIENT_ID);
        headers.put("X-Naver-Client-Secret", Config.X_NAVER_CLIENT_SECRET);
        return headers;
    }
};

 

6.queue 에 request 추가

queue.add(request);

 

반응형