Android 프레임 워 크 학습 의 Volley 와 Glide 상세 설명

11785 단어 androidvolleyglide
머리말
여러분 들 은 이 문 제 를 보 는 동시에 볼 리 와 글 라 이 드 가 어떻게 한 조각 을 가 져 와 서 말 할 수 있 을 까 생각 할 것 입 니 다.그들 은 하나의 틀 은 아니 지만 똑 같은 기능 을 가지 고 있 습 니 다.그것 이 바로 이미지 처리 입 니 다.우선 볼 리 가 무엇 인지,글 라 이 드 가 무엇 인지 살 펴 보 자.
Volley 는 구 글 이 공식 적 으로 내 놓 은 작고 정교 한 비동기 요청 라 이브 러 리 입 니 다.이 프레임 워 크 는 확장 성 이 강하 고 OkHttp 를 지원 합 니 다.Volley 안에 도 ImageLoader 가 포함 되 어 있 습 니 다.자신 은 이미지 로 딩 프레임 워 크 이지 만 이 기능 은 전문 적 인 이미지 로 딩 프레임 워 크 가 강하 지 않 아 간단 한 수요 에 사용 할 수 있 습 니 다.약간의 복잡 한 점 에 대한 수 요 는 전문 적 인 이미지 로드 프레임 워 크 를 사용 해 야 한다.Volley 도 post 빅 데 이 터 를 지원 하지 않 기 때문에 파일 을 업로드 하기에 적합 하지 않 습 니 다.그러나 볼 리 디자인 의 취지 자체 가 빈번 하고 데이터 양 이 적은 네트워크 요청 을 위해 생 긴 것 이다!
개인 제안:
요청 한 데이터 가 적 으 면 볼 리 를 사용 하 는 것 을 권장 합 니 다.코드 양 이 적 고 효과 가 높 지만 대형 파일(동 영상)을 다운로드 하 는 것 이 라면 사용 하지 마 세 요.
Glide 는 Google 이 추천 하 는 이미지 로 딩 라 이브 러 리 입 니 다.ur,파일,gif 이미지 로 딩 지원,각종 이미지 표시 전 bitmap 처리(예:원 각 이미지,원형 이미지,가우스 퍼 지,회전,그 레이스 케 일 등),캐 시 처리,우선 순위 처리 요청,애니메이션 처리,미리 보기 그림 처리,이미지 크기 사용자 정의 등 을 지원 합 니 다.
그들 은 모두 구 글 의 것 이 었 다.그런데 왜 볼 리 를 내 고 글 라 이 드 를 내 려 고 했 을 까?사실은 그들 은 교 집합 이 있 을 뿐 둘 중 하 나 를 선택 하 는 것 이 아니 라 서로 보완 하 는 것 이 었 다.우 리 는 그들 을 알 고 싶 으 면 먼저 그들 을 어떻게 사용 하 는 지 배 워 야 한다.다음은 볼 리 라 고 쓰 자.다음은 여러 부분 으로 나 뉘 어 말 하 겠 습 니 다.
우선 AndroidStudio 에 Volley 세 가지 방법 을 도입 합 니 다.
volley.jar 파일 가 져 오기
gradle 의존 에 volley 추가

compile 'com.mcxiaoke.volley:library:1.0.19'
git 를 통 해 volley 를 다운로드 하여 프로젝트 module 에 추가 합 니 다.
1:StringRequest
먼저 몸 을 풀 고 바 이 두 링크 에 들 어가 데 이 터 를 되 돌려 줍 니 다.
1.1 네트워크 주 소 를 간단하게 요청 하고 데 이 터 를 되 돌려 주 며 대기 열 을 만 듭 니 다.

RequestQueue queue=Volley.newRequestQueue(context);
1.2 필요 한 곳 에 StringRequest 만 들 기(인자..)
  • GET/POST
  • url 주소
  • 응답 감청
  • 오류 감청
  • 
    String url = "http://www.baidu.com";
    StringRequest request = new StringRequest(Request.Method.GET,url,new Response.Listener<String>(){
    @Override
    public void onResponse(String response) {result = SecuritUtil.aesBase64Decode(response); },new ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }
    }); 
    1.3 마지막 처 리 는 대기 열 에 가입 해 야 합 니 다.
    
    queue.add(request);
    내 가 가면 돼.나 도 긴 장 했 어.예전 에 httpconnect 를 사용 할 때 정말 많이 썼 고 많은 것 을 설정 해 야 했 어.retrofit 도 주 해 를 써 야 했 던 거 기억 나.retrofit 나 는 이전에 글 이 좀 있 었 는데,잘 쓰 지 못 하 는 동 지 는 가서 볼 수 있다.자,데이터 가 나 왔 습 니 다.저 는 캡 처 를 하지 않 았 습 니 다.모두 가 알 고 있 습 니 다.이것 은 아무것도 전달 하지 않 는 것 이 간단 하지만 가 치 를 전달 하고 싶다 면 POST 방법 입 니 다.
    2:POST 매개 변수 요청
    StringRequest 방법 을 만 들 기 전에 원본 코드 방법,4 개의 인 자 를 살 펴 보 겠 습 니 다.
    
    /**
      * Creates a new request with the given method.
      *
      * @param method the request {@link Method} to use
      * @param url URL to fetch the string at
      * @param listener Listener to receive the String response
      * @param errorListener Error listener, or null to ignore errors
      */
     public StringRequest(int method, String url, Listener<String> listener,
       ErrorListener errorListener) {
      super(method, url, errorListener);
      mListener = listener;
     }
    2.1:똑 같이 쓰 고 StringRequest 를 만 듭 니 다.설명 을 보십시오.
    
    StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
       @Override
       public void onResponse(String response) {
            //   
       }
      }, new Response.ErrorListener() {
       @Override
       public void onErrorResponse(VolleyError error) {
            //   
       }
      }) {//        
       @Override
       protected Map<String, String> getParams() throws AuthFailureError {
        HashMap<String, String> map = new HashMap<>();
        map.put("name", "liu");
        map.put("id", "123456789");
        return map;
       }
      };//        getParams()     StringRequest( ) ,    。
    2.2 마지막 으로 이 대상 을 queue 에 넣 어야 한다.
    
    queue.add(request);
    이것 은 끝 났 습 니 다.전송 값 을 직접 쓰 면 OK 입 니 다.모두 키 값 이 맞 는 형식 입 니 다.이 쯤 되면 보통 값 이 라 고 생각 하 는 사람 도 있 을 것 이다.내 가 JSON 에 게 전 하면 있 고 있 고 다음은 있다.
    3:JSON 형식 으로 데 이 터 를 전송 하고 받 아들 입 니 다.
    이 JSON 패스 말 도 GET 와 PSOT 를 나 누 는 방법 으로 GET 는 일반적으로 패스 하지 않 고''를 직접 작성 합 니 다.POST 는 전용 클래스 인 JSON Object Request 를 사용 합 니 다.중독 되 지 않 으 면 사용 할 수 있 습 니 다.
    JsonArrayRequest。낡은 규칙 은 먼저 소스 코드 를 보 는 것 이 좋 겠 다.
    
    /**
      * Creates a new request.
      * @param method the HTTP method to use
      * @param url URL to fetch the JSON from
      * @param requestBody A {@link String} to post with the request. Null is allowed and
      * indicates no parameters will be posted along with request.
      * @param listener Listener to receive the JSON response
      * @param errorListener Error listener, or null to ignore errors.
      */
     public JsonObjectRequest(int method, String url, String requestBody,
            Listener<JSONObject> listener, ErrorListener errorListener) {
      super(method, url, requestBody, listener,
        errorListener);
     }
    3.1:요청 방식 GET,매개 변수 없 이 전송
    
    JsonObjectRequest json=new JsonObjectRequest(Request.Method.GET, url, "",
        new Response.Listener<JSONObject>() {
         @Override
         public void onResponse(JSONObject response) {
    
         }
        },
        new Response.ErrorListener() {
         @Override
         public void onErrorResponse(VolleyError error) {
    
         }
        });
    3.2:요청 방식 POST
    
    JSONObject jsonO=new JSONObject();
      try {
       jsonO.put("name","");
       jsonO.put("ID","");
       
      } catch (JSONException e) {
       e.printStackTrace();
      }//  JSONObject  
      JsonObjectRequest json=new JsonObjectRequest(Request.Method.POST, url, jsonO,
        new Response.Listener<JSONObject>() {
         @Override
         public void onResponse(JSONObject response) {
                //ok
         }
        },
        new Response.ErrorListener() {
         @Override
         public void onErrorResponse(VolleyError error) {
                //error
         }
        });
    3.3:마지막 으로 이 대상 을 queue 에 넣 어야 합 니 다.
    
    queue.add(request);
    여기까지 볼 리 가 인터넷 데 이 터 를 어떻게 방문 하 는 지 는 끝 났 습 니 다.아직 까지 그의 그림 처 리 를 말 하지 않 았 지만 이 프레임 워 크 는 정말 쓰기 쉬 워 서 많이 썼 습 니 다.다음은 그의 사진 처 리 를 살 펴 보 자.
    4:ImageRequest,이미지 불 러 오기
     
    원본 코드:그림 URL,응답 하 는 리 셋 인터페이스,최대 그림 너비,최대 그림 높이,그림 설정 RGB 모드,잘못된 리 셋 인터페이스
    최대 그림 너비(높이)를 쓰 지 않 으 면 0 을 쓸 수 있 습 니 다.
    
    /**
      * Creates a new image request, decoding to a maximum specified width and
      * height. If both width and height are zero, the image will be decoded to
      * its natural size. If one of the two is nonzero, that dimension will be
      * clamped and the other one will be set to preserve the image's aspect
      * ratio. If both width and height are nonzero, the image will be decoded to
      * be fit in the rectangle of dimensions width x height while keeping its
      * aspect ratio.
      *
      * @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 scaleType The ImageViews ScaleType used to calculate the needed image size.
      * @param decodeConfig Format to decode the bitmap to
      * @param errorListener Error listener, or null to ignore errors
      */
     public ImageRequest(String url, Response.Listener<Bitmap> listener, int maxWidth, int maxHeight,
       ScaleType scaleType, Config decodeConfig, Response.ErrorListener errorListener) {
      super(Method.GET, url, errorListener); 
      setRetryPolicy(
        new DefaultRetryPolicy(IMAGE_TIMEOUT_MS, IMAGE_MAX_RETRIES, IMAGE_BACKOFF_MULT));
      mListener = listener;
      mDecodeConfig = decodeConfig;
      mMaxWidth = maxWidth;
      mMaxHeight = maxHeight;
      mScaleType = scaleType;
     }
    용법:모든 매개 변수 가 무엇 인지 저 는 위 에 적 었 습 니 다.몇 번 째 매개 변 수 는 무엇 을 하 는 것 입 니까?그리고 소스 코드 도 참고 하 시기 바 랍 니 다.url 그림 주소
    
    ImageRequest request =new ImageRequest(url,Response.Listener<Bitmap>(){
     @Override
        public void onResponse(Bitmap s) {
     
         Log.i("aa", "post    " + s);
         
        }
       } ,0,0,Bitmap.config.RGB_565,new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
              Log.i("aa", "post    " + s);});
    5:ImageLoader 이미지 캐 시 메커니즘(추천)
    일반 버 전에 서 자신 은 자신의 캐 시 클래스 를 호출 합 니 다.이것 은 우리 가 제어 할 수 없 는 것 입 니 다.제어 하려 면 직접 클래스 를 써 서 ImageLoader.ImageCache 를 실현 해 야 합 니 다.이것 은 우리 의 사용자 정의 View 나 사용자 정의 어댑터 에 해당 합 니 다.우 리 는 우리 가 원 하 는 결 과 를 잘 제어 할 수 있 습 니 다.예 를 들 어 최대 캐 시 량 은 10m 입 니 다.이 값 을 넘 으 면 경보 등 이 울 립 니 다.
    다음은 간단 한 용법.
    
    ImageLoader imageLoader = new ImageLoader(requestQueue, new ImageLoader.ImageCache() {
       @Override
       public Bitmap getBitmap(String url) {
       //    ,           、    。
    
        return null;
       }
    
       @Override
       public void putBitmap(String url, Bitmap bitmap) {
    
       }
      });
    //imgShow imageview  。                  
      ImageLoader.ImageListener listener = ImageLoader.getImageListener(imgShow, R.mipmap.ic_launcher, R.drawable.btn_add_true);
      imageLoader.get(url, listener, 200, 200);
    위 에 있 는 이것 은 그림 을 처리 할 수 있 지만 또 하 나 는 인 터 페 이 스 를 정의 하 는 것 입 니 다.안에 두 가지 방법 이 있 습 니 다.하 나 는 하 나 를 놓 는 것 이 고 중점 은 빨간색 을 표시 하 는 것 입 니 다.
    
    public class ImageCache implements ImageLoader.ImageCache{
    //LruCache          ,String           ,Bitmap   。
     public LruCache<String,Bitmap> lruCache;
     public int maxCache=10 * 1024 *1024;//       10M
     public ImageCache (){
      lruCache=new LruCache<>(maxCache);//     
     }
     @Override
     public Bitmap getBitmap(String url) {//    
      return lruCache.get(url);
     }
    
     @Override
     public void putBitmap(String url, Bitmap bitmap) {//    
      lruCache.put(url,bitmap);
     }
    }
    6:NetWorkImageView 자동 으로 그림 맞 추기(컨트롤)
    
    netimg = (NetworkImageView) findViewById(R.id.id_net_img);
    netimg.setErrorImageResId(R.mipmap.ic_launcher);//   
    netimg.setDefaultImageResId(R.drawable.btn_add_true);//     
    //  new ImageCache()        
    netimg.setImageUrl(url,new ImageLoader(queue,new ImageCache()));
    여기까지 볼 리 의 기본 적 인 용법 만으로 도 충분 합 니 다.글 라 이 드 의 용법 을 쓰 려 고 했 는데 비교 도 있 습 니 다.이 편 은 많이 썼 습 니 다.여러분 은 소화 하 셔 도 됩 니 다.다음 편 은 제 가 글 라 이 드 를 쓰 는 간단 한 용법 입 니 다.그리고 볼 리 대비 글 라 이 드 입 니 다.
    요약:
    볼 리 는 경량급 네트워크 요청 프레임 워 크 입 니 다.요청 한 데이터 가 적 으 면 볼 리 를 사용 하 는 것 을 권장 합 니 다.코드 양 이 적 고 효과 가 높 지만 대형 파일(동 영상)을 다운로드 하 는 경우 에는 사용 하지 마 십시오.
    그러나 만약 에 listview 가 하나 있 고 GridView 가 그림 을 불 러 오 기 를 기다 리 고 있다 면 Volley,특히 마지막 NetWorkImageView 를 사용 하면 그림 의 크기 에 자동 으로 적합 한 다음 에 얼마나 커 야 사용자 에 게 더 잘 보 여줄 수 있 는 지 통일 적 으로 판단 할 수 있다.모든 프레임 워 크 는 일부 사람들의 심혈 을 기울 인 것 이 고 장점 이 폭발 할 것 이다.프로그래머 에 게 좋 은 도구 가 앞으로 의 개발 에 얼마나 중요 한 지,하나의 기능 이 코드 를 줄 이 고 기능 이 많 으 면 코드 가 객관 적 이지 않 으 며 규범 도 명확 하 게 소개 한다.여러분 의 지지 에 감 사 드 립 니 다.
    자,이상 이 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기