Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

안드로이드 Volley로 커스텀 객체 ArrayList 가져오기 – 단계별 구현 가이드

이 튜토리얼에서는 안드로이드에서 Volley 라이브러리를 활용해 서버에서 받은 JSON 데이터를 파싱하고, 이를 커스텀 객체(ArrayList) 형태로 저장하는 방법을 단계별로 알아봅니다. Volley는 Google에서 제공하는 HTTP 통신 라이브러리로, 네트워크 요청 처리와 응답 파싱을 간편하게 수행할 수 있습니다.

1단계 – 새 프로젝트 생성

Android Studio에서 File ⇒ New Project로 이동하여 새 프로젝트를 생성하고, 필요한 모든 정보를 입력해 프로젝트 설정을 완료합니다.

2단계 – activity_main.xml 레이아웃 작성

res/layout/activity_main.xml 파일에 아래 코드를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:gravity="center"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/text"
        android:textSize="30sp"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

위 코드에서는 서버에서 받아온 커스텀 객체 리스트의 요소(이름, 이메일)를 화면에 표시하기 위해 TextView를 사용했습니다.

3단계 – MainActivity.java 구현

src/MainActivity.java 파일에 아래 코드를 추가합니다.

package com.example.myapplication;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.TextView;
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.StringRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
    TextView textView;
    RequestQueue queue;
    String URL = "https://www.mocky.io/v2/597c41390f0000d002f4dbd1";
    @RequiresApi(api = Build.VERSION_CODES.N)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.text);
        final List<UserInfo> list=new ArrayList<>();
        queue = Volley.newRequestQueue(this);
        StringRequest request = new StringRequest(Request.Method.GET, URL, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {
                    JSONObject object=new JSONObject(response);
                    JSONArray array=object.getJSONArray("users");
                    for(int i=0;i<array.length();i++) {
                        JSONObject object1=array.getJSONObject(i);
                        String name =object1.getString("name");
                        String email =object1.getString("email");
                        list.add(new UserInfo(name,email));
                    }
                    textView.setText("email: "+list.get(0).email+ " \nname: "+list.get(0).name);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d("error",error.toString());
            }
        });
        queue.add(request);
    }
    private class UserInfo {
        String name,email;
        public UserInfo(String name, String email) {
this.name=name;
this.email=email;
}
}
}

핵심 로직 설명

  • UserInfo 클래스: 이름(name)과 이메일(email)을 담는 내부 커스텀 객체입니다.
  • StringRequest: GET 방식으로 서버에 요청을 보내고 문자열 응답을 받습니다.
  • JSON 파싱: 응답받은 JSON에서 "users" 배열을 추출하고, 반복문을 통해 각 항목의 name과 email 값을 꺼내 UserInfo 객체로 만들어 리스트에 추가합니다.
  • ErrorListener: 네트워크 오류 발생 시 Logcat에 에러 내용을 출력합니다.

4단계 – AndroidManifest.xml 권한 설정

AndroidManifest.xml 파일에 인터넷 권한을 포함한 아래 코드를 추가합니다. 네트워크 통신을 위해 INTERNET 권한 선언은 필수입니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.myapplication">
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
</application>
</manifest>

5단계 – build.gradle 의존성 추가

build.gradle 파일에 Volley 라이브러리 의존성을 포함한 아래 코드를 추가합니다.

apply plugin: 'com.android.application'
android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.myapplication"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.volley:volley:1.1.0'
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

앱 실행 및 결과 확인

이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 스마트폰이 컴퓨터에 연결되어 있다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 상단 툴바의 Run(실행) 아이콘을 클릭하세요. 실행 대상으로 본인의 모바일 기기를 선택하면, 앱이 설치·실행되며 아래와 같이 서버에서 받아온 사용자 정보가 화면에 표시됩니다.

안드로이드 Volley로 커스텀 객체 ArrayList 가져오기 – 단계별 구현 가이드