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를 이용해서 한 번에 많은 이미지를 불러와봤는데, 그래도 메모리 부족나는 건 마찬가지였다.