okhttpベースのパッケージングネットワークライブラリ(2)
9381 ワード
okhttpベースのパッケージングネットワークライブラリ(2)
前言:前編は基礎的な抽象クラスをカプセル化しただけで、jsonリクエストを送信する必要があるとしたら、BaseRequestをどのように拡張すればいいのでしょうか.
ステップ1:MediaTypeを確定して解析する
ステップ2 bodyMapをJson形式に解析
結果:JsonRequest
上はPOSTリクエスト方式の本体コンテンツフォーマットのパッケージにすぎず、ビジネス層が呼び出すリクエストクラスJsonReQuestTaskを本格的に書き始めた.考え方も簡単で、基礎抽象類の抽象方法を完成すればいいので、原理は前編の冒頭で述べた.
拡張:フォーム要求FormRequest
拡張:ファイルアップロードMultipartRequest
まとめ:実はJsonフォーマットのパッケージに対して実は難しくなくて、構想がはっきりしている限り一歩でいいので、次の編は実際に豆弁に対する図書の要求を操作しましょう!
前言:前編は基礎的な抽象クラスをカプセル化しただけで、jsonリクエストを送信する必要があるとしたら、BaseRequestをどのように拡張すればいいのでしょうか.
ステップ1:MediaTypeを確定して解析する
// okhttp3.MediaType
public static final MediaType Media_Json = MediaType.parse("application/json; charset=utf-8");
//BaseRequest
public MediaType getMediaType() {
return Media_Json;
}
ステップ2 bodyMapをJson形式に解析
protected String getRequestString() {
if (mBodyMap != null && mBodyMap.size() > 0) {
try {
// fastjson bodymap json api, 。
String json = JSON.toJSONString(mBodyMap, SerializerFeature.WriteNullStringAsEmpty);
return json.toString();
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
結果:JsonRequest
public abstract class JSONRequest<T> extends BaseRequest<T> {
public static final MediaType Media_Json = MediaType.parse("application/json; charset=utf-8");
public JSONRequest( ) {
super( );
}
public MediaType getMediaType() {
return Media_Json;
}
protected String getRequestString() {
if (mBodyMap != null && mBodyMap.size() > 0) {
try {
String json = JSON.toJSONString(mBodyMap, SerializerFeature.WriteNullStringAsEmpty);
return json.toString();
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
}
上はPOSTリクエスト方式の本体コンテンツフォーマットのパッケージにすぎず、ビジネス層が呼び出すリクエストクラスJsonReQuestTaskを本格的に書き始めた.考え方も簡単で、基礎抽象類の抽象方法を完成すればいいので、原理は前編の冒頭で述べた.
public class JsonReQuestTask extends JSONRequest {
public BookDetailTask() {
super();
}
@Override
public String getApi() {
return "/api";
}
@Override
public int getHttpMethod() {
return HttpMethod.POST;
}
@Override
public Class getModelClass() {
return Bean.class;
}
拡張:フォーム要求FormRequest
public abstract class FormRequest<T> extends BaseRequest<T> {
public static final MediaType Media_FORM = MediaType.parse("application/x-www-form-urlencoded; charset=utf-8");
public FormRequest() {
super();
}
public MediaType getMediaType() {
return Media_FORM;
}
protected String getRequestString() {
if (mBodyMap != null && mBodyMap.size() > 0) {
try {
String json = encodeParameters(mBodyMap, "utf-8");
return json.toString();
} catch (Exception e) {
e.printStackTrace();
}
}
return "";
}
}
拡張:ファイルアップロードMultipartRequest
public abstract class MultiPartRequest<T> extends FormRequest<T> {
public static final MediaType Media_PART = MediaType.parse("multipart/form-data; charset=utf-8");
protected List mFiles = new ArrayList();
public MultiPartRequest() {
super();
}
public MediaType getMediaType() {
return Media_PART;
}
protected Request buildRequest() {
RequestBody body = null;
Request.Builder builder = new Request.Builder();
switch (getHttpMethod()) {
case HttpMethod.GET:
//TODO , GET 。
break;
case HttpMethod.POST:
MultipartBody.Builder bodyBuilder = new MultipartBody.Builder().setType(MultipartBody.FORM);
for (File file : mFiles) {
if (file.exists()) {
RequestBody requestBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
bodyBuilder.addFormDataPart("file", file.getName(), requestBody);
}
}
for (Map.Entry entry : mBodyMap.entrySet()) {
if (TextUtils.isEmpty(entry.getKey()) || TextUtils.isEmpty(entry.getValue())) {
continue;
}
bodyBuilder.addFormDataPart(entry.getKey(), entry.getValue());
}
body = bodyBuilder.build();
builder.url(getUrl()).post(body);
break;
default:
//TODO
break;
}
return builder.build();
}
}
まとめ:実はJsonフォーマットのパッケージに対して実は難しくなくて、構想がはっきりしている限り一歩でいいので、次の編は実際に豆弁に対する図書の要求を操作しましょう!