Xvolley - Volley 기반 패키지 도구 클래스

8639 단어
1. Volley 소스 코드 분석 (1) 2. Volley 소스 코드 분석 (2) 3. Volley 소스 코드 분석 (3) 4. 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

좋은 웹페이지 즐겨찾기