[컴][안드로이드] Volley 를 이용한 간단한 예제





volley 를 한 번 써보려 한다.


gradle, com.android.volley:volley:1.0.0

가장 간단하게 사용하는 방법은 gradle 에 library 를 적어주는 것이다. 물론 이것은 공식적으로 google 에서 지원하는 방법은 아니지만, 누군가 maven repository 에 올려놨고, 이것을 이용하는 것이다. [ref. 1]

build.gradle 에
  • compile 'com.mcxiaoke.volley:library:1.0.18'
  • compile 'com.android.volley:volley:1.0.0'

를 추가하면 된다.


<project>/app/src/build.gradle
apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.namh.volleytest"
        minSdkVersion 14
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.mcxiaoke.volley:library:1.0.18'
}



원래는 이 volley library jar 을 얻기위해 jar 을 만드는 과정을 거친다. 그것은 차후에 이야기 하도록 하고, 여기서는 단순히 사용을 해보자.(당장 궁금하다면, ref. 2 를 참고하자.)


간단한 example

간단한 예제는 ref. 4의 예제를 이용했다.
예제는 간단하다. ref. 4 의 code 는 아래 2가지 작업을 구현했다.

  1. requestQueue 를 만든다.
  2. request 를 만든다.
  3. 버튼을 누를때 queue 에 request 를 insert

android.permission.INTERNET

이 작업을 할 때 한가지 주의할 점은 internet 을 사용하기 때문에 아래 permission 을 추가해 줘야 한다.


// AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />


일단 이 code 를 build 해서 실행시켜 보면 간단하다. 그냥 우리가 간단한 http request 날리는 작업이랑 같다. 다만 좀 더 복잡한(?) 방법을 통해 이 작업을 하게 된다.

자세한 이야기는 Volley 분석 을 참고하자.



Sources

PodVolleyRequestQueue 

package volley;

/**
 * Created by namh on 2016-08-20.
 */


import android.content.Context;

import com.android.volley.Cache;
import com.android.volley.Network;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.BasicNetwork;
import com.android.volley.toolbox.DiskBasedCache;
import com.android.volley.toolbox.HurlStack;

/**
 * Custom implementation of Volley Request Queue
 */
public class PodVolleyRequestQueue {

    private static PodVolleyRequestQueue mInstance;
    private static Context mCtx;
    private RequestQueue mRequestQueue;

    private PodVolleyRequestQueue(Context context) {
        mCtx = context;
        mRequestQueue = getRequestQueue();
    }

    public static PodVolleyRequestQueue getInstance(Context context) {
        if (mInstance == null) {
            synchronized (PodVolleyRequestQueue.class) {
                if (mInstance == null) {
                    mInstance = new PodVolleyRequestQueue(context);
                }
            }
        }

        return mInstance;
    }

    public RequestQueue getRequestQueue() {
        if (mRequestQueue == null) {
            Cache cache = new DiskBasedCache(mCtx.getCacheDir(), 10 * 1024 * 1024);
            Network network = new BasicNetwork(new HurlStack());
            mRequestQueue = new RequestQueue(cache, network);
            // Don't forget to start the volley request queue
            mRequestQueue.start();
        }
        return mRequestQueue;
    }
}

PodJsonRequest 

package volley;

/**
 * Created by namh on 2016-08-20.
 */


import com.android.volley.AuthFailureError;
import com.android.volley.Response;
import com.android.volley.RetryPolicy;
import com.android.volley.toolbox.JsonObjectRequest;

import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;

public class PodJsonRequest extends JsonObjectRequest {

    public PodJsonRequest(int method, String url, JSONObject jsonRequest,
                          Response.Listener<JSONObject> listener,
                          Response.ErrorListener errorListener) {
        super(method, url, jsonRequest, listener, errorListener);
    }

    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        HashMap<String, String> headers = new HashMap<String, String>();
        headers.put("Content-Type", "application/json; charset=utf-8");
        return headers;
    }

    @Override
    public RetryPolicy getRetryPolicy() {
        // here you can write a custom retry policy
        return super.getRetryPolicy();
    }
}



MainActivity 


package com.volleyexample;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
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 org.json.JSONException;
import org.json.JSONObject;


public class MainActivity extends ActionBarActivity implements Response.Listener<JSONObject>,
        Response.ErrorListener {
    public static final String REQUEST_TAG = "MainActivity";
    private TextView mTextView;
    private Button mButton;
    private RequestQueue mQueue;

    ...

    @Override
    protected void onStart() {
        super.onStart();
        mQueue = PodVolleyRequestQueue
          .getInstance(this.getApplicationContext())
                .getRequestQueue();
        String url = "http://api.openweathermap.org/data/2.5/weather?q=London,uk";
        final PodJsonRequest jsonRequest = new PodJsonRequest(Request.Method
                .GET, url,
                new JSONObject(), this, this);
        jsonRequest.setTag(REQUEST_TAG);

        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mQueue.add(jsonRequest);
            }
        });
    }

    ...

    @Override
    public void onErrorResponse(VolleyError error) {
        mTextView.setText(error.getMessage());
    }

    @Override
    public void onResponse(JSONObject response) {
        mTextView.setText("Response is: " + response);
        try {
            mTextView.setText(mTextView.getText() + "\n\n" + ((JSONObject) response).getString
                    ("name"));
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}




ImageLoader




Reference

  1. gradle - Android Studio + Volley - Stack Overflow
  2. Android working with Volley Library
  3. 개9 블로그 Volley 잘 쓰기,
  4. Android Volley Example - Truiton
  5. Sending a Simple Request | Android Developers




댓글 없음:

댓글 쓰기