안드로이드 앱을 개발하다 보면 서버에서 데이터를 받아와 화면에 표시해야 하는 경우가 매우 많습니다. 이때 가장 널리 사용되는 데이터 형식이 바로 JSON입니다. 이 글에서는 구글이 제공하는 강력한 HTTP 통신 라이브러리인 Volley를 활용해 안드로이드 앱에서 JSON 데이터를 손쉽게 파싱하고 화면에 출력하는 방법을 단계별로 알아보겠습니다.
Step 1 – 새 프로젝트 생성
Android Studio를 실행하고 File → New Project 메뉴로 이동합니다. 새 프로젝트 생성에 필요한 모든 세부 정보(프로젝트 이름, 패키지명, 최소 SDK 버전 등)를 입력하여 새 프로젝트를 만들어 주세요.
Step 2 – 레이아웃 파일 작성
JSON 파싼 결과를 표시할 TextView와 파싱을 실행할 Button을 배치하기 위해 res/layout/activity_main.xml 파일에 아래 코드를 추가합니다.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16sp"
tools:context=".MainActivity">
<TextView
android:id="@+id/textViewResult"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:textSize="20sp" />
<Button
android:id="@+id/btnParse"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_alignParentBottom="true"
android:layout_marginBottom="20sp"
android:text="Parse JSON"/>
</RelativeLayout>Step 3 – 테스트용 JSON 배열 만들기
파싱 연습에 사용할 JSON 데이터가 필요합니다. myjson.com 사이트에 접속해 직접 JSONArray를 생성할 수 있습니다. 아래는 직원 정보를 담은 예시 JSON입니다.
{
"employees": [
{
"firstname": "Niyaz",
"age": 30,
"mail": "niyaz3444@gmail.com"
},
{
"firstname": "Mashu",
"age": 25,
"mail": "mashu123@gmail.com"
},
{
"firstname": "Rahul",
"age": 22,
"mail": "rahul@gmail.com"
},
{
"firstname": "Azhar",
"age": 40,
"mail": "azhar0987@gmail.com"
},
{
"firstname": "Aachu",
"age": 32,
"mail": "aachu@gmail.com"
}
]
}JSON을 저장하면 해당 데이터에 바로 접근할 수 있는 URL이 발급됩니다. 예시 URL은 다음과 같습니다.
https://api.myjson.com/bins/xbspb
발급받은 JSON URL을 복사해서 MainActivity.java 파일에 붙여넣으면 됩니다.
Step 4 – MainActivity.java 작성
이제 Volley를 사용해 JSON을 요청하고 응답을 파싱하는 핵심 로직을 src/MainActivity.java에 구현합니다.
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
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.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class MainActivity extends AppCompatActivity {
private TextView textView;
private RequestQueue requestQueue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textViewResult);
Button buttonParse = findViewById(R.id.btnParse);
requestQueue = Volley.newRequestQueue(this);
buttonParse.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
jsonParse();
}
});
}
private void jsonParse() {
String url = "https://api.myjson.com/bins/xbspb";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray = response.getJSONArray("employees");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject employee = jsonArray.getJSONObject(i);
String firstName = employee.getString("firstname");
int age = employee.getInt("age");
String mail = employee.getString("mail");
textView.append(firstName + ", " + String.valueOf(age) + ", " + mail + "
");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
requestQueue.add(request);
}
}코드 설명: Volley.newRequestQueue(this)로 요청 큐를 생성하고, JsonObjectRequest를 통해 GET 방식으로 JSON을 요청합니다. 응답이 성공적으로 도착하면 onResponse() 콜백에서 employees 배열을 순회하며 이름, 나이, 이메일을 추출해 TextView에 추가합니다. 오류 발생 시에는 onErrorResponse()에서 처리됩니다.
Step 5 – AndroidManifest.xml 설정
네트워크 통신을 수행하려면 인터넷 권한 선언이 반드시 필요합니다. androidManifest.xml 파일에 아래와 같이 INTERNET 권한을 추가하세요.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
<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" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>앱 실행 및 결과 확인
모든 준비가 끝났습니다. 실제 안드로이드 기기를 컴퓨터에 USB로 연결한 상태라고 가정하고 진행하겠습니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 상단 툴바의 Run(실행) 아이콘을 클릭하세요. 실행 옵션 목록에서 자신의 모바일 기기를 선택하면 앱이 설치되고 실행됩니다.
앱이 실행되면 화면 하단의 “Parse JSON” 버튼을 눌러보세요. 서버에서 JSON 데이터를 가져와 파싱한 결과가 다음과 같이 화면에 표시됩니다.

마무리
지금까지 Volley 라이브러리를 사용해 안드로이드 앱에서 JSON을 파싱하는 전체 과정을 살펴봤습니다. Volley는 요청 우선순위 관리, 자동 재시도, 이미지 로딩 지원 등 다양한 기능을 제공하기 때문에 REST API 통신에 매우 유용한 라이브러리입니다. 이 예제를 응용해 RecyclerView와 결합하면 실무 수준의 목록 화면도 쉽게 구현할 수 있습니다.