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

안드로이드에서 Volley 라이브러리로 JSON 배열 객체 요소를 읽는 방법

안드로이드 앱을 개발하다 보면 서버에서 받아온 JSON 데이터를 파싱해야 하는 경우가 많습니다. 이 글에서는 구글의 HTTP 통신 라이브러리인 Volley를 사용해 JSON 배열 객체의 요소를 읽어오는 방법을 단계별로 살펴보겠습니다.

1단계: 새 프로젝트 생성

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

2단계: 레이아웃 파일 작성 (res/layout/activity_main.xml)

다음 코드를 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>

위 코드에서는 서버에서 가져온 JSON 배열 객체의 정보를 화면에 표시하기 위해 TextView를 배치했습니다.

3단계: 메인 액티비티 작성 (src/MainActivity.java)

다음 코드를 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 android.widget.Toast;
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;
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);
      queue = Volley.newRequestQueue(this);
      StringRequest request = new StringRequest(Request.Method.GET, URL, new Response.Listener<String>() {
         @Override
         public void onResponse(String response) {
            textView.setText(response.toString());
            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");
                  textView.setText(name);
               }
            } catch (JSONException e) {
               e.printStackTrace();
            }
         }
      }, new Response.ErrorListener() {
         @Override
         public void onErrorResponse(VolleyError error) {
            Log.d("error",error.toString());
         }
      });
      queue.add(request);
   }
}

코드의 핵심 흐름은 다음과 같습니다.

  • Volley의 RequestQueue를 생성해 네트워크 요청을 관리합니다.
  • StringRequest로 GET 방식 요청을 보내고, 응답으로 받은 문자열을 JSONObject로 변환합니다.
  • getJSONArray("users")로 "users"라는 키에 담긴 JSON 배열을 가져옵니다.
  • 반복문을 돌며 각 배열 요소에서 getString("name")으로 이름 값을 추출해 TextView에 표시합니다.

4단계: 매니페스트 설정 (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 라이브러리로 JSON 배열 객체 요소를 읽는 방법

참고로 예제에서 사용한 mocky.io 테스트 URL은 현재 서비스가 종료되어 동작하지 않을 수 있습니다. 실습 시에는 httpbin.org나 자신이 직접 만든 테스트 API 등 다른 JSON 응답 엔드포인트로 URL을 교체해서 사용하는 것을 권장합니다.