Android 에서 Volley 프레임 워 크 는 네트워크 데이터 사용 을 요청 합 니 다.
해결:Volley 는 이러한 것들 을 해결 하기 위해 태 어 났 습 니 다.2013 년 구 글 I/O 대회 에서 제 기 된 것 과 같 습 니 다.안 드 로 이 드 응용 네트워크 작업 을 더욱 편리 하고 빠르게 할 수 있 습 니 다.바 텀 Http Client 등 이 실현 하 는 디 테 일 을 추상 화하 여 개발 자 들 이 RESTful Request 에 더욱 집중 하고 생 성 하도록 합 니 다.또한 볼 리 는 서로 다른 스 레 드 에서 모든 요 구 를 비동기 로 실행 하여 메 인 스 레 드 를 막 지 않도록 했다.
Volley 는 AsyncHttpClient 와 Universal-Image-Loader 의 장점 을 한데 모 았 다 고 할 수 있다.AsyncHttpClient 처럼 간단하게 HTTP 통신 을 할 수도 있 고,Universal-Image-Loader 처럼 네트워크 에 있 는 그림 을 쉽게 불 러 올 수도 있다.간단 하고 사용 하기 쉬 운 것 을 제외 하고 Volley 는 성능 도 대폭 조정 했다.그의 디자인 목 표 는 데이터 양 이 많 지 않 지만 통신 이 빈번 한 네트워크 조작 에 매우 적합 하 다 는 것 이다.반면에 빅 데이터 양의 네트워크 조작,예 를 들 어 파일 을 다운로드 하 는 등 Volley 의 표 는 매우 나 빠 질 것 이다.
1.볼 리 는 도대체 어떤 특징 이 있 나 요?
자동 스케줄 링 네트워크 요청
여러 개의 병렬 네트워크 연결
표준 HTTP 캐 시 메커니즘 을 사용 하여 디스크 와 메모리 응답 을 일치 시 킵 니 다.
지원 요청 우선 순위
요청 을 취소 하 는 강력 한 API 를 지원 합 니 다.단일 요청 이나 여러 개 를 취소 할 수 있 습 니 다.
맞 춤 형 제작 이 용이 하 다.
건장 성:UI 를 정확하게 업데이트 하고 데 이 터 를 얻 을 수 있 습 니 다.
디 버 깅 및 추적 도구 포함
2.Volley 의 RequestQueue 와 Request
●RequestQueue 요청 을 수행 하기 위 한 요청 대기 열
●Request 는 요청 대상 을 만 드 는 데 사용 된다.
●Request 대상 은 주로 다음 과 같은 몇 가지 유형 이 있 습 니 다.
a.StringRequest 응답 주 체 는 문자열 입 니 다.
b.JSONArray Request 에서 JSON 배열 을 보 내 고 받 습 니 다.
c.JSON Object Request 에서 JSON 대상 을 보 내 고 받 습 니 다.
d.ImageRequest 에서 Image 를 보 내 고 받 습 니 다.
3.Volley 의 사용 절차:
(1)안 드 로 이 드 프로젝트 를 만 들 고 볼 리 의 jar 패 키 지 를 가 져 옵 니 다.
(2)GET 의 요청 방식:
// RequestQueue
RequestQueue requestQueue = Volley.newRequestQueue(this);
String url="http://api.m.panda.tv/ajax_get_all_subcate?__version=1.0.1.1300&__plat=android";
// request
StringRequest request=new StringRequest(url, new Response.Listener<String>() {
/**
*
* @param response
*/
@Override
public void onResponse(String response) {
//
}
}, new Response.ErrorListener() {
/**
* ,
* 07-19 04:17:13.414: E/tag(1181): -------------
* com.android.volley.VolleyError:
* java.lang.SecurityException:
* Permission denied (missing INTERNET permission?)==========================
*/
@Override
public void onErrorResponse(VolleyError error) {
Log.e("tag","-------------"+ error+"==========================");
}
});
// Request RequestQueue 。
requestQueue.add(request);
(3)Post 요청 방식:요청 방법 을 지정 하여 Request.Method.POST 로 post 요청 을 한 다음 getParams 방법 으로 요청 인 자 를 설정 합 니 다.POST 요청 을 보 낼 때 볼 리 는 StringRequest 의 부모 클래스 인 Request 의 getParams()방법 으로 POST 인 자 를 가 져 오 려 고 시도 합 니 다.
// RequestQueue
RequestQueue requestQueue = Volley.newRequestQueue(this);
String url=”http://api.m.panda.tv/ajax_get_all_subcate”;
StringRequest request=new StringRequest(Request.Method.POST, url, new Response.Listener() {
@Override
public void onResponse(String response) {
Log.e("tag", " ============"+response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("tag", " ============"+error);
}
}){
/**
* getParams ,post
*/
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap<String, String> params = new HashMap<String,String>();
params.put("__version", "1.0.1.1300");
params.put("__plat", "android");
return params;
}
};
requestQueue.add(request);
(3)그림 을 불 러 오 는 방법:첫 번 째 그림 불 러 오 는 방법
RequestQueue requestQueue = Volley.newRequestQueue(context);
String img = datas.getImg();
// , , , 0 , 。
//
ImageRequest request=new ImageRequest(img, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
holder.iv.setImageBitmap(response);
}
}, 0, 0,Bitmap.Config.ARGB_8888, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
}
});
requestQueue.add(request);
두 번 째 그림 불 러 오 는 방법사실 그림 을 불 러 오 는 기능 은 이 뿐만 이 아 닙 니 다.ImageLoader 를 사용 하면 그림 에 대한 캐 시 를 실현 할 수 있 고 중복 링크 를 걸 러 중복 요청 을 피 할 수 있 습 니 다.
ImageLoader 의 사용 방법 은 다음 과 같은 몇 가지 로 요약 된다.
1.RequestQueue 대상 을 만 듭 니 다.
2.ImageLoader 대상 을 만 듭 니 다.
3.ImageListener 대상 가 져 오기.
4.ImageLoader 의 get()방법 으로 네트워크 에 있 는 그림 을 불 러 옵 니 다.
// ImageCache, LruCache
public class BitmapCache implements ImageLoader.ImageCache {
private LruCache<String, Bitmap> mCache;
public BitmapCache() {
int maxSize = 10 * 1024 * 1024;
mCache = new LruCache<String, Bitmap>(maxSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getRowBytes() * bitmap.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
return mCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
mCache.put(url, bitmap);
}
}
private void getImageByImageLoader() {
ImageView iv= (ImageView) findViewById(R.id.iv);
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
String url = "https://www.baidu.com/img/bdlogo.png";
ImageLoader loader=new ImageLoader(queue,new BitmapCache() );
// ImageView
//
//
ImageLoader.ImageListener listener=ImageLoader.getImageListener(iv,R.mipmap.ic_launcher,R.mipmap.ic_launcher);
// ImageLoader get()
// URL
// ImageListener
// , get() , ,
loader.get(url,listener);
}
세 번 째 그림 불 러 오 는 방법마지막 으로 볼 리 는 그림 을 불 러 오 는 사용자 정의 ImageView 를 제공 합 니 다.사용 방법 은 다음 과 같 습 니 다.
1.RequestQueue 대상 을 만 듭 니 다.
2.ImageLoader 대상 을 만 듭 니 다.
3.레이아웃 파일 에 NetworkImageView 컨트롤 을 추가 합 니 다.
4.코드 에서 이 컨트롤 의 인 스 턴 스 를 가 져 옵 니 다.
5.불 러 올 그림 주 소 를 설정 합 니 다.
단계 1:레이아웃 에서 이 컨트롤 을 설명 합 니 다.
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/network_image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
/>
단계 2:프로그램 에서 불 러 오기
public void networkImageView(){
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
ImageLoader loader=new ImageLoader(queue,new BitmapCache() );
NetworkImageView niv= (NetworkImageView) findViewById(R.id.network_image_view);
niv.setDefaultImageResId(R.mipmap.ic_launcher);//
niv.setErrorImageResId(R.mipmap.ic_launcher);//
niv.setImageUrl("https://www.baidu.com/img/bdlogo.png", loader);// URL
}
4.사용자 정의 요청실제 응용 프로그램 에 서 는 http 요청 을 json 과 통합 시 켜 야 하 는데,Volley 는 이러한 방식 을 지원 하고 있 습 니 다.그러나 우리 스스로 Request 를 사용자 정의 해 야 합 니 다.여 기 는 google 의 Gson 라 이브 러 리 를 사용 하여 통합 합 니 다.
1.계승 요청 클래스
2.parseNetworkResponse 를 다시 쓰 고 json 과 실체 류 의 전환 을 실현 합 니 다.실체 류 가 정 해 지지 않 았 기 때문에 범 형 을 사용 합 니 다.
다음 에 사용 할 json 문자열 은 다음 과 같 습 니 다.
{“name”:”lizhangqu”,”age”:16}
단계 1:
package cn.edu.zafu.http;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import com.google.gson.Gson;
import java.io.UnsupportedEncodingException;
/**
* Created by lizhangqu on 2015/5/7.
*/
public class GsonRequest<T> extends Request<T> {
private final Response.Listener<T> mListener;
private Gson mGson;
private Class<T> mClass;
public GsonRequest(int method, String url, Class<T> clazz, Response.Listener<T> listener,
Response.ErrorListener errorListener) {
super(method, url, errorListener);
mGson = new Gson();
mClass = clazz;
mListener = listener;
}
public GsonRequest(String url, Class<T> clazz, Response.Listener<T> listener,
Response.ErrorListener errorListener) {
this(Method.GET, url, clazz, listener, errorListener);
}
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data,
HttpHeaderParser.parseCharset(response.headers));
return Response.success(mGson.fromJson(jsonString, mClass),
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
}
}
@Override
protected void deliverResponse(T response) {
mListener.onResponse(response);
}
}
단계 2:테스트 실체 클래스 를 작성 하고,두 필드 에 name,age 를 작성 합 니 다.
package cn.edu.zafu.http;
/**
* Created by lizhangqu on 2015/5/7.
*/
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
STEP 3:호출 방법 은 StringRequest 와 같 습 니 다.아래 와 같다
private void json(){
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
String url = "http://121.41.119.107/test/index.php";
GsonRequest<Person> request=new GsonRequest<Person>(url, Person.class, new Response.Listener<Person>() {
@Override
public void onResponse(Person response) {
Log.d("TAG",response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
queue.add(request);
}
위 에서 말씀 드 린 것 은 편집장 님 께 서 소개 해 주신 안 드 로 이 드 의 볼 리 프레임 워 크 에서 인터넷 데이터 의 사용 을 요청 하 는 것 입 니 다.여러분 께 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Volley 네트워크 라이브러리를 바탕으로 다양한 네트워크 그림을 불러옵니다 (GIF 동적 그림, 원형 그림, 일반 그림 포함)Volley 네트워크 라이브러리를 바탕으로 다양한 네트워크 그림을 불러옵니다 (GIF 동적 그림, 원형 그림, 일반 그림 포함) 본 사례는 Volley 네트워크 라이브러리를 바탕으로 이루어진 다양한 네트워크 이미지를...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.