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

안드로이드에서 Volley로 받은 커스텀 객체 ArrayList를 역순으로 뒤집는 방법

이 튜토리얼에서는 안드로이드에서 Volley 라이브러리로 서버에서 가져온 데이터를 커스텀 객체 형태의 ArrayList에 담은 뒤, 이를 역순으로 뒤집어 화면에 출력하는 방법을 단계별로 알아봅니다.

1단계: 새 프로젝트 생성

Android Studio에서 File → New Project를 선택하고, 새 프로젝트 생성에 필요한 모든 정보를 입력하여 프로젝트를 만듭니다.

2단계: 레이아웃 파일 작성 (res/layout/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>

위 코드에서는 커스텀 ArrayList 객체의 요소가 역순으로 변경된 결과를 화면에 보여주기 위한 TextView를 배치했습니다.

3단계: 메인 액티비티 코드 작성 (src/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.Collections;
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));
                    }
                    Collections.reverse(list);
                    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;
        }
    }
}

핵심 로직을 살펴보면 다음과 같습니다.

  • Volley의 StringRequest를 사용해 지정한 URL에서 JSON 데이터를 GET 방식으로 요청합니다.
  • 응답으로 받은 JSON 배열("users")을 순회하면서 각 사용자의 이름(name)과 이메일(email)을 추출해 UserInfo라는 커스텀 객체로 만들고 리스트에 추가합니다.
  • Collections.reverse(list) 메서드를 호출하면 리스트 전체가 역순으로 뒤집힙니다.
  • 마지막으로 뒤집힌 리스트의 첫 번째 요소(원래는 마지막 요소였던 데이터)를 TextView에 출력합니다.

4단계: 매니페스트 설정 (AndroidManifest.xml)

네트워크 통신을 위해 인터넷 권한이 반드시 필요합니다. 아래 코드를 AndroidManifest.xml에 추가합니다.

<?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)

Volley 라이브러리를 사용하기 위해 아래와 같이 build.gradle 파일에 의존성을 추가합니다.

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를 역순으로 뒤집는 방법

화면에는 원본 데이터의 마지막 사용자 정보가 역순 정렬 후 첫 번째 항목으로 표시되는 것을 확인할 수 있습니다. 이처럼 Collections.reverse() 메서드 하나만으로도 Volley로 받아온 커스텀 객체 리스트를 손쉽게 역순으로 정렬할 수 있습니다.