Volley 단순 학습 사용 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);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.