Android Studio

[Android Studio] 안드로이드 네트워크 통신 Volley 라이브러리

건휘맨 2024. 6. 11. 11:43

공식 홈페이지 =>  https://google.github.io/volley/

 

Volley overview

Volley overview Volley is an HTTP library that makes networking for Android apps easier and most importantly, faster. Volley is available on GitHub. Volley offers the following benefits: Automatic scheduling of network requests. Multiple concurrent network

google.github.io

 

build.gradle파일의 dependencies에 아래 코드 입력

dependencies {

    implementation(libs.appcompat)
    implementation(libs.material)
    implementation(libs.activity)
    implementation(libs.constraintlayout)
    testImplementation(libs.junit)
    androidTestImplementation(libs.ext.junit)
    androidTestImplementation(libs.espresso.core)
	
    // 추가한 항목
    implementation("com.android.volley:volley:1.2.1")
}

 

 

AndroidManifest.xml 에 <application> 위에 아래 코드 추가 ( 권한 설정 )

<uses-permission android:name="android.permission.INTERNET"/>

 

실행할 액티비티에서 사용

public class MainActivity extends AppCompatActivity {

    ProgressBar progressBar;
    FloatingActionButton fab;

    // todo 리사이클러뷰는 한번에 설정
    RecyclerView recyclerView;
    ArrayList<Posting> postingArrayList = new ArrayList<>();
    PostingAdapter adapter;

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

        progressBar = findViewById(R.id.progressBar);
        fab = findViewById(R.id.fab);
        recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));

        // 리사이클러뷰는 한번에 설정

        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

        // 설정이 끝나면 네트워크 통해서 데이터를 받아오고 화면에 표시한다.
        // 1. request queue 를 만든다.
        RequestQueue queue = Volley.newRequestQueue(MainActivity.this);

        // 2. request 를 만든다. => 응답 데이터의 JSON 형식을 먼저 확인한다.
        JsonObjectRequest request = new JsonObjectRequest(
       			// 가져올 방식
                Request.Method.GET,
                // URL
                "https://block1-image-test.s3.ap-northeast-2.amazonaws.com/posting.json",
                // 보낼 데이터 X => null
                null,
                // 성공했을때 받아온 데이터 처리
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        progressBar.setVisibility(View.GONE);

                        // response에 데이터가 있으니 이 데이터를 Parsing
                        try {
                            JSONArray dataArray = response.getJSONArray("data");
                            // 하나씩 꺼내서 메모리에 객체 생성하고
                            // 여러 개니까 어레이리스트에 저장
                            // 모든 데이터를 전부 저장하고 나면 화면에 표시
                            for(int i=0; i<dataArray.length(); i++){
                                JSONObject data = dataArray.getJSONObject(i);
                                int id = data.getInt("id");
                                int userId = data.getInt("userId");
                                String title = data.getString("title");
                                String body = data.getString("body");

                                Posting posting = new Posting(id, userId, title, body);
                                postingArrayList.add(posting);
                            }

                            adapter = new PostingAdapter(MainActivity.this, postingArrayList);
                            recyclerView.setAdapter(adapter);

                        } catch (JSONException e) {
                            Toast.makeText(MainActivity.this,
                                    "파싱 에러",
                                    Toast.LENGTH_SHORT).show();
                            Log.i("ACTION MAIN", e.toString());
                            return;
                        }

                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        progressBar.setVisibility(View.GONE);

                        Toast.makeText(MainActivity.this,
                                "네트워크 통신 에러",
                                Toast.LENGTH_SHORT).show();
                        Log.i("ACTION MAIN", volleyError.toString());
                    }
                }
        );

        // 3. 만든 request 를 queue 에 넣어준다.
        queue.add(request);

    }
}