Volley 단순 학습 사용 1

1. 프로필:
     Volley Github 주소:https://github.com/mcxiaoke/android-volley
 
Volley 는 AsyncHttpClient 와 Universal - Image - Loader 의 장점 을 한데 모 았 다 고 한다. AsyncHttpClient 처럼 간단하게 HTTP 통신 을 할 수도 있 고, Universal - Image - Loader 처럼 네트워크 에 있 는 그림 을 쉽게 불 러 올 수도 있다.간단 하고 사용 하기 쉬 운 것 을 제외 하고 볼 리 는 성능 에 있어 서도 큰 폭 으로 조정 했다. 그의 디자인 목 표 는 데이터 양 이 많 지 않 지만 통신 이 빈번 한 네트워크 조작 에 매우 적합 하 다 는 것 이다. 그러나 빅 데이터 양의 네트워크 조작, 예 를 들 어 파일 을 다운로드 하 는 등 볼 리 의 표 는 매우 나 빠 질 것 이다.
    Volley 는 인터넷 통신 의 일부 개발 을 간소화 해 야 한다. 특히 다음 과 같은 두 가지 상황 에 대해:
JSON 대상 그림 불 러 오기 2. 간단 한 사용:
(1) 간단 한 GET 요청, 데이터 형식 을 String 으로 되 돌려 줍 니 다.
1. 네트워크 권한 추가
    <uses-permission android:name="android.permission.INTERNET"/>

2. 간단 한 사용 절차
    private RequestQueue mRequestQueue;
    //    RequestQueue
    mRequestQueue = Volley.newRequestQueue(this);
       
    //    StringRequest---GET  
    String url = "http://www.baidu.com";
    StringRequest stringRequest = new StringRequest(url,
    new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.d(TAG, response);
        }
    },
    new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e(TAG, error.getMessage());
        }
    });
       
    // StringRequest     RequestQueue
    mRequestQueue.add(stringRequest);

3. 결 과 는 Html 소스 문자열 을 얻 을 수 있 습 니 다.
(2) 간단 한 JSON GET 요청 방법 은 위 와 유사 합 니 다. 여 기 는 다른 Request 구조 함 수 를 사용 합 니 다.
    String jsonurl = "http://pipes.yahooapis.com/pipes/pipe.run?_id=giWz8Vc33BG6rQEQo_NLYQ&_render=json";
    Response.Listener<JSONObject> listener = new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            Log.i(TAG, response.toString());
        }
    };
   
    Response.ErrorListener errorListener = new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.i(TAG, error.getMessage());
        }
    };
 
    JsonObjectRequest jr = new JsonObjectRequest(Request.Method.GET, jsonurl, null, listener, errorListener);
    mRequestQueue.add(jr);

(3) 간단 한 POST 요청
    JsonObjectRequest postRequest = new JsonObjectRequest(Request.Method.POST, jsonurl,  null, listener, errorListener) { 
       
        // Post      map 
        @Override 
        protected Map<String, String> getParams() throws AuthFailureError { 
            Map<String, String> map = new HashMap<String, String>(); 
            map.put("params1", "value1"); 
            map.put("params2", "value2"); 
            return map; 
        } 
    }; 
    mRequestQueue.add(postRequest);

3. 그림 불 러 오 는 방법 사용
(1) ImageRequest 를 사용 하여 이 루어 집 니 다. 절차 가 유사 합 니 다.
    String imageUrl = "http://a.hiphotos.baidu.com/image/pic/item/3801213fb80e7bec5cfb43e02d2eb9389b506b89.jpg";
    int max_width  = 300;
    int max_height = 300;
    Response.Listener<Bitmap> listener = new Response.Listener<Bitmap>() {
        @Override
        public void onResponse(Bitmap response) {
            myImageView.setImageBitmap(response);
        }
    };
   
    Response.ErrorListener errorListener = new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            myImageView.setImageResource(R.drawable.default_pg);
        }
    };
   
    ImageRequest imageRequest = new ImageRequest(imageUrl, listener, max_width, max_height, Config.RGB_565, errorListener);
    mRequestQueue.add(imageRequest);

그 중에서 ImageRequest 의 매개 변 수 는 다음 과 같 습 니 다.
    * @param url URL of the image
    * @param listener Listener to receive the decoded bitmap
    * @param maxWidth Maximum width to decode this bitmap to, or zero for none
    * @param maxHeight Maximum height to decode this bitmap to, or zero for
    *            none
    * @param decodeConfig Format to decode the bitmap to
    * @param errorListener Error listener, or null to ignore errors

주: 1. max Width, max Height 는 가장 큰 그림 의 너비 가 높 고 그림 이 이 사 이 즈 를 초과 하면 압축 합 니 다.0 으로 설정 하면 압축 하지 않 고 직접 불 러 옵 니 다.
      2. decodeConfig 는 그림 의 색상 속성 을 말 합 니 다. Bitmap. Config 의 상수 몇 개 를 여기 서 사용 할 수 있 습 니 다. 그 중에서 ARGB8888 가장 좋 은 색상 속성 을 보 여 줍 니 다. 그림 픽 셀 당 4 바이트 크기 를 차지 하고 RGB565 는 각 그림 의 픽 셀 이 2 바이트 크기 를 차지 한 다 는 것 을 나타 낸다.
(2) ImageLoader 를 사용 하여 실현
     ImageLoader 는 네트워크 에 있 는 그림 을 불 러 오 는 데 도 사용 할 수 있 고 내부 도 ImageRequest 를 사용 하여 이 루어 집 니 다. 그러나 ImageLoader 는 ImageRequest 보다 훨씬 효율 적 입 니 다. 그림 을 캐 시 할 수 있 을 뿐만 아니 라 중복 되 는 링크 를 걸 러 내 서 중복 전송 요청 을 피 할 수 있 기 때 문 입 니 다.
    //     RequestQueue,      ,        
    String imageUrl = "http://a.hiphotos.baidu.com/image/pic/item/3801213fb80e7bec5cfb43e02d2eb9389b506b89.jpg";
   
    //  LruCache        
    final LruCache<String, Bitmap> mImageLruCache = new LruCache<String, Bitmap>(20);
   
    //  ImageCache,     
    ImageCache imageCache = new ImageCache() {
        @Override
        public void putBitmap(String url, Bitmap bitmap) {
            mImageLruCache.put(url, bitmap);
        }
       
        @Override
        public Bitmap getBitmap(String url) {
            return mImageLruCache.get(url);
        }
    };
   
    //  ImageLoader
    ImageLoader imageLoader = new ImageLoader(mRequestQueue, imageCache);
   
    /**
     * @param imageView The imageView that the listener is associated with.
     * @param defaultImageResId Default image resource ID to use, or 0 if it doesn't exist.
     * @param errorImageResId Error image resource ID to use, or 0 if it doesn't exist.
     */
    //    ImageListener  
    ImageListener imageListener = ImageLoader.getImageListener(myImageView, R.drawable.default_pg, R.drawable.failed_pg);
   
    //  ImageLoader get()          
    imageLoader.get(imageUrl, imageListener);
   
    //              ,  get()        
    imageLoader.get(imageUrl, imageListener, 300, 300);

    ImageLoader 가 제공 할 수 있 는 가장 좋 은 실천 은 바로 이미지 캐 시 를 제공 하 는 것 입 니 다. 여 기 는 LruCache 를 통 해 이 루어 집 니 다. 최대 캐 시 된 그림 수 는 20 장 입 니 다.최대 캐 시 그림 의 메모리 크기 를 사용자 정의 할 수 있 습 니 다. 다음 과 같 습 니 다.
    final LruCache<String, Bitmap> mImageLruCache = new LruCache<String, Bitmap>(maxSize){
        @Override
        protected int sizeOf(String url, Bitmap bitmap){
            return bitmap.getRowBytes() * bitmap.getHeight();
        }
    };
   
    ImageCache imageCache = new ImageCache() {
        @Override
        public void putBitmap(String url, Bitmap bitmap) {
            mImageLruCache.put(url, bitmap);
        }
       
        @Override
        public Bitmap getBitmap(String url) {
            return mImageLruCache.get(url);
        }
    };

이렇게 해서 최대 캐 시 크기 가 10M 이 고 정책 이 LRU 인 LRuCache 를 만 들 었 습 니 다.
(3) NetworkImageView 를 사용 하 는 방법
1. 먼저 XML 레이아웃 에서 이 컨트롤 을 사용 합 니 다.
    <com.android.volley.toolbox.NetworkImageView
        android:id="@+id/myNetworkImageView"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:contentDescription="@string/hello_world"
        />

    다운로드 한 그림 은 width 와 height 크기 에 따라 압축 되 며, 그림 을 압축 하지 않 으 려 면 wrap content 를 사용 할 수 있 습 니 다.
2. 그리고 코드 에 NetworkImageView 를 사용 합 니 다.
    //    ImageLoader     ,      
    //  NetworkImageView
    NetworkImageView imageView = (NetworkImageView) findViewById(R.id.myNetworkImageView);
    imageView.setDefaultImageResId(R.drawable.default_pg);
    imageView.setErrorImageResId(R.drawable.failed_pg);
    imageView.setImageUrl(imageUrl, imageLoader);

좋은 웹페이지 즐겨찾기