마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

(초보)Volley Library를 실제로 코딩하였을 때 동작 과정이 궁금합니다.

0 추천

프로그램 안드로이드 스튜디오 (폭스)

데이터를 통신함에 있어서 Volley Library가 필요하다는 것을 깨닫고 현재 코딩을 해보면서 공부중입니다.

현재 "회원가입완료" 버튼을 클릭시 volley와 JSONObject를 사용하여 제가 호스팅중인 홈페이지에 데이터를 업로드 하는 방식을 구현하려 합니다.

앱 실행은 아직 코드가 완성되지 않아 동작여부는 확인하지 못했습니다.

 

Request문의 동작 구조가 아래와 같다는 것은 이해했습니다.

package unknownPG.Firstwork;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.android.volley.Response;

import org.json.JSONException;
import org.json.JSONObject;

public class Sub_membership_Activity extends AppCompatActivity {

    private EditText et_membership_id;
    private EditText et_membership_password;
    private Button btn_membership_complete;


    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_membership);

        et_membership_id = findViewById(R.id.아이디입력);
        et_membership_password = findViewById(R.id.비밀번호입력);
        btn_membership_complete = findViewById(R.id.회원가입완료);

        btn_membership_complete.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v){

            String userID = et_membership_id.getText().toString();
            String userPassword = et_membership_password.getText().toString();

            Response.Listener<String> responseListener = new Response.Listener<String>() {

                // Response.Listener<String>을 새로 정의 하면서 응답 값을 responseListener로 지정해주려고 하는 것 같다.

                @Override
                public void onResponse(String response) {
                    try {
                        // 질문 . onResponse 인자값 response는 무슨 값을 갖고 있는지 궁금한데 어떻게 확인하는지.
                        // ex)   System.out.println(response); 이클스에서는 중간중간 인자값이 무엇이 들어있는지 확인 할 수 있었지만 안드로이드 스튜디오에서는 어디로 출력되는지 가늠이안된다.
                        JSONObject jsonObject = new JSONObject(response);
                        boolean success = jsonObject.getBoolean("success");

                        if(success){
                            Toast.makeText(getApplicationContext(),"회원가입이 완료되었습니다.", Toast.LENGTH_SHORT).show();
                            // getApplicationContext()를 this로 사용하면 안되는 이유
                            Intent intent = new Intent(Sub_membership_Activity.this , MainActivity.class);
                            startActivity(intent);
                        }
                        else{
                            Toast.makeText(getApplicationContext(),"로그인에 실패하였습니다.",Toast.LENGTH_SHORT).show();
                            return;
                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                    } }};}});}}

-----------------------------------------------------------------------------------------------------------------------

질문내용 요약.

1) Request의 구조를 보면 Request는 RequestQueue에 추가하고 RequestQueue는 서버에 요청을 한다.서버는 응답 값을 RequestQueue에 보내주며 응답 값을 내포하고 있는 RequestQueue는 응답처리기인 ResponseListener에게 전달해준다. 

그런데 어떻게 바로 이 과정을 생략하고 바로 

Response.Listener<stiring> responseListener = new ~~ {

~~

}

나오는 건지 궁금합니다. 

new Response.Listener<String>(){

~~

} 이 부분이 위의 과정을 모두 포함하고 있어서 그런건가요 ?

 

2) 중간중간 메소드의 인자값으로 무엇을 받은 건지 궁금해서 알아보고 싶은대 어떻게 해야 될지를 모르겠습니다.  예를 들어 이클립스에서는 System.out.println(인자값) 을 이용하여 무엇을 받았는지 확인 할 수 있었는데 안스는 다른 것 같습니다...

 

3) 통신 성공시 Toast문을 사용하였는대 인자값에서 getApplicationContext()를 this로 바꾸면 오류가 발생하는 이유가 궁금합니다.

오류내용은 아래와 같습니다.

  • no suitable method found for makeText(>,String,int) method Toast.makeText(Context,CharSequence,int) is not applicable (argument mismatch; > cannot be converted to Context) method Toast.makeText(Context,int,int) is not applicable (argument mismatch; > cannot be converted to Context)
AndroidDdobot (260 포인트) 님이 2021년 11월 16일 질문
AndroidDdobot님이 2021년 11월 16일 수정
Volley + JSONObject보다는 Retrofit + Gson 을 사용하시길  권장드려요. 이유는 후자가 업계의 표준같은 거고, Okhttp와 조합해서 로깅이라 토큰처리 등 추가적인 작업을 하기가 훨씬 용이하고, 후에 Java는 RxJava, Kotlin은 Coroutine과 자연스럽게 연동을 할 수 있기 때문에 코드 측면에서 나은 구조와 사용성을 가져갈 수 있습니다. Retrofit 을 사용해 보시면 알겠지만, Volley에 비해 불필요한(boilerplate) 코드가 많이 적어집니다.
전 세계 안드로이드 개발자들이 가장 많이 쓰는 조합이 Retrofit + OkHttp3 + Gson + RxJava/Coroutine 입니다. 많이 쓴다는 것은 그만큼 자료도 많고 문제가 있을 때 해결이 용이하고, 업데이트가 상대적으로 빠르다는 말입니다.
어쩐지....
구글링해도 상세한 설명이 없더라구요.
훗날 it분야쪽 나갈 생각도 있고 표준을 공부하는게 더 바람직 할 거 같네요.!

Retrofit 과 Gson 한번 공부해 보겠습니다.!! 조언 매번 감사합니다.

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...