[android] async http client – Volley

http 사용하는 예제 앱 만드는 중에 좀 더 편하게 하는 방법 없나 싶어서 찾다보니  http://helloworld.naver.com/helloworld/377316 이 글이 나왔다.

음…아…그렇구나…..그래서 뭐가 좋은거지…..하다가 페이지 제일 아래의 댓글이 보니 Volley 라는 놈이 작년 구글IO에서 발표됐다고 한다.

윗글 적은 분이 https://gist.github.com/benelog/5981448 이 글도 적으셨길래 읽어보니 좋아보인다.(라이브러리 팔랑귀)

영어로는 http://arnab.ch/blog/2013/08/asynchronous-http-requests-in-android-using-volley/ 이 페이지가 설명이 잘 된 듯 싶다.

 

아직 작성 중인 라이브러리라서 언제 정식으로 안드로이드에 포함이 될지는 모르지만, 조만간 되지 않을까 싶다.

홈페이지는 여기이고, git을 쓰면 된다.
https://android.googlesource.com/platform/frameworks/volley
받은 소스는 라이브러리 프로젝트라서 jar 파일이 만들어지는데, 이걸 복사해서 사용할 프로젝트의 libs에 넣으면 된다.

 

private void get()
{
  String url = "http://www.redmine.org/issues/16079.xml";
  RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
  StringRequest request = new StringRequest(url, successListener, failListener);
  queue.add(request);
}

 

private void get()
{
  String url = "http://www.redmine.org/issues/16079.xml";
  RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
  StringRequest request = new StringRequest(url, successListener, failListener)
  {
     @Override
     public Map<String, String> getHeaders() throws AuthFailureError
     {
        HashMap<String, String> hash = new HashMap<String, String>();
        hash.put("key0", "value0");
        hash.put("key1", "value1");
        return hash;
     }
  };
  queue.add(request);
}

 

private void post()
{
  String url = "http://posttestserver.com/post.php";
  RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
  StringRequest request = new StringRequest(Method.POST, url, successListener, failListener)
  {
     @Override
     public Map<String, String> getHeaders() throws AuthFailureError
     {
        HashMap<String, String> hash = new HashMap<String, String>();
        hash.put("key0", "value0");
        hash.put("key1", "value1");
        return hash;
     }
  };
  queue.add(request);
}

 

private Response.Listener<String> successListener = new Response.Listener<String>()
{
  @Override
  public void onResponse(String reponse)
  {
    Log.i("MainActivity.java | onResponse", "|" + reponse.toString() + "|");
  }
};

private ErrorListener failListener = new ErrorListener()
{
  @Override
  public void onErrorResponse(VolleyError e)
  {
    Log.e("MainActivity.java | onErrorResponse", "|" + e.getLocalizedMessage() + "|");
    e.printStackTrace();
  }
};

 

하지만 저 위의 설명에 나온 NetworkImageView를 이용해서 한 번에 많은 이미지를 불러와봤는데,  그래도 메모리 부족나는 건 마찬가지였다.