안녕하세요 푸민입니다.
저번 시간까지 Volley 클래스를 이용하여 RequestQueue 를 생성하였습니다.
먼저 RequestQueue 를 만들면 그 다음에 할 일이 ImageRequest 를 생성하는 것입니다.
ImageRequest 는 설정을 하여 이미지를 요청하는 클래스인데요.
public ImageRequest(String url, Response.Listener<Bitmap> listener, int maxWidth, int maxHeight, 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;
}
ImageRequest 의 생성자입니다.
첫 번째 인자로 연결하려는 서버 Uri를
두 번째 인자는 서버에 연결하여 이미지를 받아온 뒤에 불러주는 리스너이고
세 번째 인자는 최대 가로 크기를
네 번째 인자는 최대 세로 크기,
다섯 번째 인자는 Bitmap RGB 설정
마지막 인자는 실패했을 때 리스너입니다.
인자값이 상당히 많지만 하나하나 보면 간단해요!
public class ImageRequest extends Request<Bitmap> {
...
}
각 멤버 변수의 값을 설정하고 super 메소드를 호출하여 상속 받았던 Request 글래스의 생성자 또한 설정합니다.
static int findBestSampleSize(int actualWidth, int actualHeight, int desiredWidth, int desiredHeight){
}
private static int getResizedDimension(int maxPrimary, int maxSecondary, int actualPrimary,int actualSecondary) {
}
위와 같이 사이즈를 조정하는 메소드도 있고
protected Response<Bitmap> parseNetworkResponse(NetworkResponse response) {
synchronized (sDecodeLock) {
try {
return doParse(response);
} catch (OutOfMemoryError e) {
return Response.error(new ParseError(e));
}
}
}
결과값을 Response 객체로 변환하여 리스너를 불리게 해주는 메소드도 있습니다.
또 이 메소드는 결과를 받은 다음에 처리하는 것이라서 결과가 여러번 불리는 것을 방지하기 위해 synchronized (sDecodeLock) 를 이용하여 동기화로 묶어줬습니다.
private static final Object sDecodeLock = new Object();
eDecodeLock 은 동기화를 사용하기 위해서 쓴 별 의미 없는 클래스 같아요 ㅎ
'Development > Android' 카테고리의 다른 글
[안드로이드] Android Image Volley 분석5 (0) | 2015.09.19 |
---|---|
[안드로이드] Android Image Volley 분석4 (0) | 2015.09.18 |
[안드로이드] Android Image Volley 분석 02 (0) | 2015.09.16 |
[안드로이드] Android Image Volley 분석 01 (0) | 2015.09.11 |
[안드로이드] Font 적용하기 (0) | 2015.09.10 |
댓글