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

Android에서 Volley StringRequest로 서버 데이터 요청하는 방법

Android에서 Volley를 활용한 간단한 문자열 요청 보내기

Volley는 구글(Google)이 제공하는 안드로이드용 HTTP 통신 라이브러리로, 네트워크 요청을 간편하게 처리하고 자동으로 요청 큐(Request Queue)를 관리해 주는 것이 특징입니다. 이 글에서는 Volley의 StringRequest를 사용하여 서버로부터 문자열 응답을 받아오는 기본적인 방법을 단계별로 살펴보겠습니다.

1단계 — 새 프로젝트 생성

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

2단계 — 레이아웃 파일 작성

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 작성

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 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;
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());
                Toast.makeText(MainActivity.this,response.toString(),Toast.LENGTH_LONG).show();
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d("error",error.toString());
            }
        });
        queue.add(request);
    }
}

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

  • RequestQueue 생성: Volley.newRequestQueue(this)를 호출하여 요청을 관리할 큐를 만듭니다.
  • StringRequest 생성: GET 방식으로 지정된 URL에 요청을 보내며, 성공 시 onResponse()에서 응답을 처리하고 실패 시 onErrorResponse()에서 오류를 로그로 남깁니다.
  • 큐에 요청 추가: queue.add(request)를 호출하면 Volley가 비동기적으로 네트워크 통신을 수행합니다.

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>

참고: Android 9(API 28)부터는 기본적으로 HTTPS만 허용됩니다. 위 예제처럼 HTTP URL을 사용하려면 android:usesCleartextTraffic="true" 속성을 application 태그에 추가해야 할 수 있습니다.

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) 아이콘을 클릭한 뒤, 목록에서 본인의 모바일 기기를 선택하세요. 정상적으로 동작하면 기기 화면에 서버에서 받아온 응답 문자열이 표시됩니다.

Android에서 Volley StringRequest로 서버 데이터 요청하는 방법