Volley 가 요청 한 간단 한 패키지 및 application / json 데이터 요청

이 몇 달 동안 몇 가지 항목 을 접 했 는데 인터넷 이라는 부분 에 대해 세 션 을 유지 해 야 합 니 다. 이렇게 하면 좋 은 점도 많 습 니 다. 예 를 들 어 요청 할 때 저 희 는 사용자 와 관련 된 민감 한 데 이 터 를 휴대 하지 않 고 서버 에서 식별 할 수 있 습 니 다. 여 기 는 session 과 쿠키 와 관련 되 어 소 개 를 하지 않 습 니 다.
1. 첫 번 째, request 계승, request 사용자 정의
여기 서 우리 가 주목 해 야 할 것 은 주로 두 가지 방법 이 있다.
첫 번 째 는 parseNetworkResponse 입 니 다. 분명 한 것 은 네트워크 가 되 돌아 오 는 바 이 너 리 데 이 터 를 우리 가 필요 로 하 는 자바 실체 류 로 분석 해 야 합 니 다. 이 방법 을 호출 할 때 서브 스 레 드 에서 실 행 됩 니 다. 이 분석 데 이 터 는 인터페이스 가 끊 기 는 것 을 피 할 수 있 습 니 다.
두 번 째 는 deliverResponse 입 니 다. 여기 서 결과 데 이 터 를 한 번 에 배포 할 수 있 습 니 다. 이 수 ui 스 레 드 는 실 행 됩 니 다. 우 리 는 여기 서 네트워크 가 돌아 온 결 과 를 통일 적 으로 걸 러 낼 수 있 습 니 다. 예 를 들 어 로그 인 이 효력 을 잃 었 습 니 다. 이것 은 모든 인터페이스 에서 돌아 올 수 있 습 니 다. 여기 서 걸 러 내 면 작업량 을 줄 일 수 있 습 니 다. 끊 을 필요 가 없 으 면 listener 의 onResponse 를 호출 하여 결 과
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
    T t = null;
    if (response.statusCode == 200) {
        try {
            String c = response.headers.get("set-Cookie");
            if (c != null)
                cookie = response.headers.get("set-Cookie");
            String json = new String(response.data,
                    HttpHeaderParser.parseCharset(response.headers, Constant.CHARSET));
            L.e("     json", json + "");

            JSONObject root = new JSONObject(json);
            errorCode = root.getInt("errorCode");
            massage = root.getString("massage");
            if (errorCode == RESPONSE_CODE_SUCCEED && (entyty != null || type != null)) {
                String entityJson = root.getString("entity");
                t = JsonUtils.getGson().fromJson(entityJson, entyty != null ? entyty : type);
            }
        } catch (JSONException | UnsupportedEncodingException e) {
            e.printStackTrace();
            return Response.error(new ParseError());
        }
        return Response.success(t, HttpHeaderParser.parseCacheHeaders(response));
    } else {
        L.i("GsonRequest", "    ,errorCode:" + response.statusCode);
        return Response.error(new NetworkError(response));
    }
}

@Override
protected void deliverResponse(T response) {
    switch (errorCode) {
        case RESPONSE_CODE_LOGIN_SUCCEED://    
            distribute.onResponse(response);
            new CarchHandle(context).sendToService();
            break;
        case RESPONSE_CODE_SUCCEED://  
            distribute.onResponse(response);
            break;
        case RESPONSE_CODE_UNLOGIN:
            L.e(this, "   ,    JSESSIONID");
            LoginModel model = new LoginModel(context);
            model.login(UserUtils.getUserInfo(context), new CommonListener() {
                @Override
                public void successListener(UserBean user) {
                    start(context);
                }

                @Override
                public void errorListener(int errorCode, String errorMassage) {
                    Toast.makeText(context, "       ", Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent(context, LoginActivity.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                    context.startActivity(intent);
                }
            });
            break;

2. application / json 요청
vollley 의 post 요청 은 기본 값 입 니 다.
application / x - www - form - urlencoded 방식 입 니 다. 이것 은 부모 클래스 의 getBody ContentType 방법 을 볼 수 있 습 니 다. 우 리 는 이 방법 을 다시 써 서 우리 가 필요 로 하 는 contentType 을 되 돌려 주 고 getBody 방법 을 다시 써 서 요청 한 실체 클래스 를 되 돌려 주면 됩 니 다. 이것 은 application / json 을 예 로 들 면 됩 니 다.
@Override
public byte[] getBody() throws AuthFailureError {
    return json.getBytes();
}

@Override
public String getBodyContentType() {

    return "application/json;charset=" + getParamsEncoding();
}

코드 주소:
https://github.com/linqipeng/volleyCustomrequest

좋은 웹페이지 즐겨찾기