OkHttp 프레임 워 크 2 차 패키지, post json 형식의 인자 (상)
10963 단어 안 드 로 이 드 개발 노트
요청 한 패키지
이 편 은 주로 배경 데이터 형식 에 대한 요청 매개 변 수 를 봉인 합 니 다.패 키 징 의 목적 은 배경 데이터 구조 에 맞 춰 클 라 이언 트 가 데이터 요청 과 응답 데 이 터 를 처리 하 는 데 편리 하도록 하 는 것 입 니 다.
데이터 요청 형식
데이터 요청 의 요청 은 JSon 형식 으로 서버 에 파 라 메 터 를 전달 합 니 다. 이 예 에서 파 라 메 터 는 공 삼 과 사 삼 으로 나 뉘 는데 요청 체 구 조 는 다음 과 같 습 니 다.
{
"args": {
"pri_args": {
"username": "xxxxxx",
"password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"pub_args": {
"appversion": "xxx",
"imei": "xxxxxxxx",
"token": "xxxxxxxx",
"uid": xxxxxx
}
}
}
사용 과정 에서 가장 먼저 해 야 할 일 은 매개 변수 에 대한 조합 이다. 개인 매개 변수 와 공 삼 을 분리 하 는 것 이다. 전체 앱 에 로그 인 만 하면 인 터 페 이 스 를 요청 할 때마다 공 삼 은 상대 적 으로 고정 되 어 있 기 때문에 공 삼 을 숨 길 수 있 고 사용자 가 요청 할 때마다 스스로 공 삼 을 써 서 전송 하지 않 아 도 된다. app 이 열 릴 때 공 삼 에 값 을 부여 해 야 한다.그리고 모든 인터페이스 에 대해 서 는 사 참 만 전달 하면 된다.
앞 말 을 하 다
프로젝트 는 홍 양 대신 이 봉 인 된 Okhttp - utils 프레임 워 크 를 사용 합 니 다. JSon 형식의 데이터 요청 에 따라 2 차 봉 인 했 습 니 다. 대신 을 경 배 합 니 다!다음은 원래 프레임 워 크 주소: 블 로그 주소:http://blog.csdn.net/lmj623565791/article/details/47911083
github:https://github.com/hongyangAndroid/okhttp-utils
개폐 원칙 에 따라 2 차 포장 은 원래 의 틀 에 칼 을 휘 두 르 지 않 고 원래 의 틀 에 의존 할 뿐 이 를 바탕 으로 2 차 포장 을 했 을 뿐이다.
【 Look here 】: 배경 에서 정 의 된 요청 형식 이 다 르 기 때문에 반환 필드 에 도 차이 가 있 습 니 다. args, priargs、pub_args 등 이 필드 들 은 모두 같 지 않 기 때문에 본 글 에 포 장 된 프레임 워 크 는 직접 가 져 와 서 사용 할 수 없 을 수도 있 습 니 다. 그러나 제 가 포장 한 것 을 참조 하여 조롱박 에 따라 바 가 지 를 그 릴 수 있 습 니 다. 본 편 은 자신 이 포장 할 때의 생각 과 쓴 후의 경험 만 소개 하고 기술 공 유 는 말 할 것 도 없 으 니 참고 하 시기 바 랍 니 다.
매개 변수의 조합
원래 Okhttp - utils 에 서 는 json 형식 매개 변수 에 대한 패키지 가 없 었 지만 String 형식 매개 변수 에 대한 패키지 방법 postString 이 있 습 니 다. 이 방법 을 빌려 서 이 방법 을 한 번 더 패키지 할 수 있 습 니 다. 이 효 과 는 사용 할 때 맵 으로 들 어 가 는 것 입 니 다.
OkHttpUtils.postString().url(THost.HOST).content(paramContent).build().execute(callback);
사용 할 때 url 과 content 를 입력 한 다음 potstring 이 실제 적 으로 PostString Builder 형식의 대상 인 스 턴 스 를 되 돌려 주 는 것 을 볼 수 있 습 니 다.
OkHttpUtils.java
public static PostStringBuilder postString() {
return new PostStringBuilder();
}
그리고 이 대상 의 build 방법 을 통 해 url 과 content 인 자 를 전송 하여 RequestCall 대상 을 만 들 었 습 니 다.
PostStingBuilder.java
public RequestCall build() {
return (new PostStringRequest(this.url, this.tag, this.params, this.headers, this.content, this.mediaType, this.id)).build();
}
OkHttpRequest.java
public RequestCall build() {
return new RequestCall(this);
}
마지막 으로 execute 방법 으로 요청 을 보 내 고 이 방법 에 두 개의 인 자 를 보 냈 습 니 다. 하 나 는 방금 생 성 된 RequestCall 대상 이 고 다른 하 나 는 자신 이 정의 한 Callback 입 니 다.
public void execute(final RequestCall requestCall, Callback callback)
{
......
}
우리 가 해 야 할 일 은 1. 프레임 워 크 사용자 에 게 방법 을 제공 하여 Map 유형의 인 자 를 전달 하 는 것 이다.2. 들 어 오 는 매개 변 수 를 json string 3 으로 바 꾸 고 얻 은 json string 을 post String 방법 으로 보 냅 니 다.
전 삼 이 든 전환 이 든 모두 Builder 에서 쓸 수 있 습 니 다.
우 리 는 PostStringBuilder 클래스 를 템 플 릿 으로 하여 PostJSonBuilder 클래스 를 새로 만 들 수 있 습 니 다.
public class TPostJsonBuilder extends OkHttpRequestBuilder {
private String paramContent;
private MediaType mediaType;
private Map pri_args;
private Map pub_args;
public TPostJsonBuilder() {
this.pri_args = new HashMap<>() ;
this.pub_args = new HashMap<>() ;
}
public TPostJsonBuilder(String paramContent, Map pri_args, MediaType mediaType, Map pub_args) {
this.paramContent = paramContent;
this.pri_args = pri_args;
this.mediaType = mediaType;
this.pub_args = pub_args;
}
public TPostJsonBuilder pri_args(Map args) {
this.pri_args = args ;
return this;
}
public TPostJsonBuilder pub_args(Map args) {
this.pub_args = args ;
return this;
}
public TPostJsonBuilder paramContent(String content) {
if (content != null) {
this.paramContent = content;
} else if (this.pri_args.size() != 0 && this.pub_args.size() != 0){
this.paramContent = initParams(this.pri_args,this.pub_args) ;
} else {
Exceptions.illegalArgument("args cannot be null !");
}
return this;
}
// , json string
private String initParams(Map pri_args, Map pub_args) {
Map> priArgs = new HashMap<>();
priArgs.put("pri_args",pri_args);
Map> pubArgs = new HashMap<>();
pubArgs.put("pub_args",pub_args);
Map>> args = new HashMap<>() ;
// pub_args pri_args
priArgs.putAll(pubArgs);
args.put("args",priArgs);
Gson g = new Gson();
String argsStr = g.toJson(args) ;
return argsStr ;
}
public TPostJsonBuilder mediaType(MediaType mediaType)
{
this.mediaType = mediaType;
return this;
}
@Override
public RequestCall build() {
paramContent = initParams(this.pri_args,this.pub_args) ;
mediaType = MediaType.parse("application/json;charset=utf-8") ;
return new PostStringRequest(url,tag,params,headers,paramContent,mediaType,id).build();
}
}
안에 매개 변 수 를 사 참 pri 로 나 눕 니 다.args 와 공 삼 pubargs 두 부분, 그리고 이 두 매개 변수 에 반환 값 이 TPostJSonBuilder 대상 인 방법 을 노출 시 켜 사용자 가. priargs(pri).pub_args (pub) 에서 매개 변 수 를 전달 합 니 다.그 다음 에 관건 적 인 initParams 방법 에서 사 참 과 공 삼 을 서버 에 필요 한 형식 으로 연결 한 다음 에 json string 으로 전환 하고 build 방법 에서 PostStringRequest 를 통 해 RequestCall 을 구축 합 니 다.이러한 매개 변수의 패 키 징 은 기본적으로 완성 되 었 다.
그 다음 에 사용자 에 게 postJSon 방법 을 폭로 하 는 것 입 니 다. 우 리 는 OkHttpUtils 에서 계승 하 는 종 류 를 씁 니 다.
TOkhttpUtil.java
public class TOkhttpUtil extends OkHttpUtils {
public static void initPubParams(Map pub_args) {
TPublicParam.publicparam = pub_args ;
}
public static void initHeadS(String s) {
TPublicParam.headparam.put("s",s) ;
}
public TOkhttpUtil(OkHttpClient okHttpClient) {
super(okHttpClient);
}
public static TPostJsonBuilder postJson() { return new TPostJsonBuilder(); }
}
TPostJSonBuilder 대상 을 되 돌려 주 는 방법 이 있 습 니 다.그리고 두 가지 방법 이 있 습 니 다. initPub Params 와 initHeadS, 이 두 가지 방법 은 공 삼 과 요청 헤더 에 대한 패키지 입 니 다.이 예 에서 요청 머리 에 2 개의 필드 가 있 고 s 필드 는 상대 적 으로 변 하지 않 으 며 m 필드 는 인터페이스 마다 다 르 기 때문에 s 를 먼저 밀봉 할 수 있 습 니 다. 다음은 말씀 드 리 겠 습 니 다.
이렇게 TOkhttUtil 을 이렇게 사용 할 수 있 습 니 다.
TOkhttpUtil.postJson().url(THost.HOST).pri_args(pri_args).pub_args(pub_args).build().execute(callback)
그 중의 priargs 와 pubargs 는 각각 전해 야 할 공 삼 과 사 삼 이다. 예 를 들 어:
Map pri_args = new HashMap<>();
pri_args.put("username"," ");
pri_args.put("password","4f32d39b42v322vkj43");
Map pub_args = new HashMap<>();
pub_args.put("appversion","1.0.1");
pub_args.put("imei","0000-0033-3300-3232-9909-3333");
pub_args.put("token","4f32d39b42v322vkj43");
pub_args.put("uid",9527);
글 의 시작 부분 에 전달 할 매개 변수 형식 을 얻 을 수 있 습 니 다.
매개 변수 패키지
요청 할 수 있 지만, 공 삼 의 값 은 대부분 변 하지 않 습 니 다. 호출 방법 마다 pubargs 도 좋 지 않 기 때문에 패 키 징 파 라 메 터 를 통 해 여러 개의 재 업로드 방법 을 노출 하여 사용자 가 더욱 편리 하 게 사용 할 수 있 습 니 다.
TBaseApi.java
public class TBaseApi {
// , url, , , ,
public static void createPostRequest(String url, Map heads, Map pri_args, Map pub_args, TBaseCallback callback){
TOkhttpUtil.postJson()
.url(url)
.headers(heads)
.pri_args(pri_args)
.pub_args(pub_args)
.build()
.execute(callback) ;
}
// , 。
public static void createPostRequest(String url, Map heads, Map pri_args, TBaseCallback callback){
TOkhttpUtil.postJson()
.url(url)
.headers(heads)
.pri_args(pri_args)
.pub_args(TPublicParam.publicparam)
.build()
.execute(callback) ;
}
// HOST
public static void createPostRequest(Map heads, Map pri_args, TBaseCallback callback){
TOkhttpUtil.postJson()
.url(THost.HOST)
.headers(heads)
.pri_args(pri_args)
.pub_args(TPublicParam.publicparam)
.build()
.execute(callback) ;
}
// s , m 。
public static void createPostRequest(String headM, Map pri_args, TBaseCallback callback){
TOkhttpUtil.postJson()
.url(THost.HOST)
.headers(TPublicParam.addHeadM(headM))
.pri_args(pri_args)
.pub_args(TPublicParam.publicparam)
.build()
.execute(callback);
}
}
위의 방법 에 서 는 여러 가지 선택 을 제 공 했 고 TPublic Param 에 서 는 공 삼 을 봉 했다.사용 할 때 초기 화 할 때 고정된 공 삼 과 사 삼 을 넣 으 면 됩 니 다.
예 를 들 어 TApplication. java 에서 초기 화:
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(10*1000L, TimeUnit.MILLISECONDS)
.readTimeout(10*1000L, TimeUnit.MILLISECONDS)
.build();
TOkhttpUtil.initClient(client) ;
TOkhttpUtil.initPubParams(TPublicParam.addPublicParams(pubParams));
TOkhttpUtil.initHeadS(TConstants.getS());
이렇게 하면 나중에 호출 할 때 최소한 의 인자 만 전달 할 수 있 습 니 다. 예 를 들 어 요청 헤드 의 m 필드, 개인 참조, 사용자 정의 콜 백 등 입 니 다. 이미 봉 인 된 머리의 s 필드 와 공 삼 은 신경 쓰 지 않 아 도 됩 니 다.
예 를 들 면:
Map<String,Object> pri_args = new HashMap();
TBaseCallback callback = new ....
TBaseApi.createPostRequest("getUserInfo",pri_args,callback) ;
다음 편 에 서 는 응답 하 는 패키지 와 TBase Callback 이 무엇 인지 소개 한다.관심 이 있 으 면 다음 편 을 볼 수 있다.http://blog.csdn.net/black_dreamer/article/details/53068627
github 주소:https://github.com/herdotage/Android_sample/tree/master/LOkhttpUtils
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
OkHttp 프레임 워 크 2 차 패키지, post json 형식의 인자 (상)args, priargs、pub_args 등 이 필드 들 은 모두 같 지 않 기 때문에 본 글 에 포 장 된 프레임 워 크 는 직접 가 져 와 서 사용 할 수 없 을 수도 있 습 니 다. 사용 할 때 url 과 co...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.