Xvolley - Volley 기반 패키지 도구 클래스
앞의 몇 편의 블 로 그 는 Volley 의 소스 코드 를 분석 한 데다 가 최근 에 이라는 책 을 읽 고 있다.
기능
1. GET 2. POST 3. post json 4. post 파일 전송 (큰 파일 형식 은 지원 되 지 않 음) 5. 사용자 정의 차단기 6. gson 7. 설정 URL 8. 전역 URL, HEADER, 차단기
최적화
1. 단일 모드 는 전역 요청 대기 열 2. weakreference 가 Activity 를 가지 고 있 고 onFinish () 리 셋 을 지원 하 며 메모리 누 출 을 방지 합 니 다. 3. 전역 설정 URL 지원, HEADER 4. 체인 호출 5. 필터 추가
3. 미래 구상
1. 쿠키 지원 2. 큰 파일 지원 3. 업로드 파일 진행 리 셋 지원 4. https 5 지원...
How to:
Step 1. Add the JitPack repository to your build file Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Step 2. Add the dependency
dependencies {
compile 'com.github.sdfdzx:XVolley:v1.0.1'
}
Usage
1. 애플 리 케 이 션 에서 요청 대기 열 을 초기 화 합 니 다.
XVolley.create(getApplicationContext());
2. 애플 리 케 이 션 에 Header, URL, Intercepter 를 전역 적 으로 설정 합 니 다. (선택 가능)
init (Config config) 방법 을 호출 하여 Config 는 BaseConfigBuilder 를 통 해 구 축 됩 니 다.
Map header = new HashMap<>();
header.put("user-token", "AEUHY98QIASUDH");
BaseConfigBuilder config = new BaseConfigBuilder();
config.baseUrl("http://127.0.0.1/get.php")
.addParam("client", "Android")
.addParam("position", " ")
.addHeaders(header)
.addIntercept(new Interceptor() {
@Override
public Request intercept(Chain chain) {
Request request = chain.request();
LogUtil.log("intercept","baseIntercept:"+request.getUrl());
return request;
}
});
XVolley.create(getApplicationContext())
.init(config.build());
3. GET 요청
XVolley.getInstance()
.doGet()
.url("http://127.0.0.1/get.php")
.addParam("name", "xuan")
.build()
.execute(this, new CallBack() {
@Override
public void onSuccess(Context context, String response) {
}
});
이 곳 의. url () 방법 은 전역 설정 의 URL 을 덮어 씁 니 다. 전역 URL 을 사용 하면 addParam 방법 을 직접 호출 하여 원 하 는 대로 사용 할 수 있 습 니 다.
4. POST 요청
XVolley.getInstance()
.doPost()
.url("http://127.0.0.1/post.php")
.addParam("user", "xuan")
.build()
.execute(this, new CallBack() {
@Override
public void onSuccess(Context context, String response) {
Log.e("Success", response);
}
});
5. POST 문자열 전송 요청
weather weather = new weather();
weather.setCity(" ");
weather.setMessage(" json post ");
//post json
XVolley.getInstance()
.doPostString()
.url("http://127.0.0.1/stringpost.php")
.content(new Gson().toJson(weather))
.build()
.execute(this,new CallBack(){
@Override
public void onSuccess(Context context, String response) {
Log.e("Success", response);
}
});
6. 파일 업로드 (작은 파일, 바이트 흐름 구현 방식)
다 중 파일, 다 중 매개 변 수 를 지원 합 니 다.
XVolley.getInstance()
.doPostFile()
.url("http://127.0.0.1/filex.php")
.addParam("name","xuan")
.addFile("txt", "bb.txt", Environment.getExternalStorageDirectory() + "/bb" +
".txt")
.addFile("png", "aa.txt", Environment.getExternalStorageDirectory() + "/aa" +
".png")
.build()
.execute(MainActivity.this, new CallBack() {
@Override
public void onSuccess(Context context, String response) {
LogUtil.log("success",response);
}
});
7. Gson 해석
체인 호출 에 goGson (Class c) 방법 을 추가 하여 Gson 에 대응 하 는 class 형식 을 입력 해 야 합 니 다.모든 종류의 요청 이 가능 합 니 다.
XVolley.getInstance()
.doGet()
.url( "http://www.sojson.com/open/api/weather/json.shtml")
.addParam("city", " ")
.addHeaders(header)
.goGson(weather.class)
.build()
.execute(MainActivity.this, new CallBack() {
@Override
public void onSuccess(Context context, weather response) {
Log.e("Success", response.getCity());
}
});
8. 필터.
Interceptor 인 터 페 이 스 를 실현 하 는 intercept 방법.
public interface Interceptor {
Request intercept(Chain chain);
interface Chain {
Request request();
}
}
(1) 전역 필터 지원
Map header = new HashMap<>();
header.put("user-token", "AEUHY98QIASUDH");
BaseConfigBuilder config = new BaseConfigBuilder();
config.baseUrl("http://127.0.0.1/get.php")
.addParam("client", "Android")
.addParam("position", " ")
.addHeaders(header)
.addIntercept(new Interceptor() {
@Override
public Request intercept(Chain chain) {
Request request = chain.request();
LogUtil.log("intercept","baseIntercept:"+request.getUrl());
return request;
}
});
XVolley.create(getApplicationContext())
.init(config.build());
(2) 단독 필터 지원
Map header = new HashMap<>();
header.put("APP-Secret", "ad12msa234das232in");
XVolley.getInstance()
.doGet()
.url(
"http://www.sojson.com/open/api/weather/json.shtml")
.addParam("city", " ")
.addHeaders(header)
.goGson(weather.class)
.build()
.addInterceptor(new Interceptor() {
@Override
public Request intercept(Chain chain) { LogUtil.log("intercept","custom");
Request request = chain.request();
String url = request.getUrl();
if (url.contains("sojson")) {
request.cancel();
return request;
}
return request;
}
})
.execute(MainActivity.this, new CallBack() {
@Override
public void onSuccess(Context context, weather response) {
Log.e("Success", response.getCity());
}
});
(3) 전역 + 단독 재 귀적 호출 을 지원 합 니 다. 단독 필 터 를 호출 한 다음 전역 필 터 를 호출 합 니 다.
9.CallBack
ICall Back 인 터 페 이 스 를 실현 하여 모든 방법 을 실현 할 수 있 습 니 다.
public interface ICallBack {
void onBefore();
void onSuccess(Context context, T response);
void onError(VolleyError error);
void onAfter();
void onFinish();
}
또는 CallBack 류 를 실현 하고 필요 한 방법 을 실현 합 니 다.
public abstract class CallBack implements ICallBack {
@Override
public void onBefore() {
}
@Override
public void onSuccess(Context context, T response) {
}
@Override
public void onError(VolleyError error) {
}
@Override
public void onAfter() {
}
@Override
public void onFinish() {
}
}
onFinish 방법 은 요청 과정 에서 Activity 가 소각 한 리 셋 에 대응 하여 자원 을 회수 하여 메모리 누 출 을 방지 할 수 있 습 니 다.
10.Listener
내부 Listener 는 WeakReference 를 사용 하여 Activity 대상 을 보유 하고 있어 메모리 누 출 을 방지 합 니 다.
public abstract class WeakListener{
final WeakReference activityWeakReference;
final ICallBack callBack;
public WeakListener(Context activity, ICallBack callBack) {
activityWeakReference = new WeakReference((Activity) activity);
this.callBack = callBack;
}
}
마지막 으로 Github 주소:https://github.com/sdfdzx/XVolley
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.