rxjava 2+okhttp 3+retrofit 2(要求パラメータはパラメータキー値の小さい順にソート)
最近、ネットワーク・フレームワーク・ライブラリがアップグレードされました.以前は1バージョンの組み合わせでした.今このrxjava 2+okhttp 3+retrofit 2を使って、組み合わせに必要なライブラリをオフラインにダウンロードする習慣があります.この組み合わせは次のようになります.
上のライブラリ全体のダウンロードアドレス:https://download.csdn.net/download/qq_16064871/11409551
使用例を添付します:マルチパラメータリクエストとファイルダウンロードインタフェース
直接jsonがgsonを用いて回転した構造体を返す.解析を心配する必要はありません.オンラインjson解析でJavaエンティティクラスを生成できます.android studioのプラグインも使用できます.
初期化:
次に、データの返却を要求するパラメータを示します.
これで完成です.
ここで、キー値の小さい順から大きい順にソートする:1、パラメータソートパッチはパラメータ名(sign自体を除く)に基づいてすべての要求パラメータをパラメータキー値の小さい順から大きい順にソートする:key 1=value 1&key 2=value 2&key 3=value 3.....(順番に類推)、最後に&token=tokenValue;最後にMD 5を暗号化して署名する.たとえば、インタフェースパスパラメータa=>「パラメータ1」、c=>「パラメータ2」、b=>「パラメータ3」をパラメータキー値でソートするように要求する必要があります.a=パラメータ1&b=パラメータ2&c=パラメータ3
2、tokenがddssf 22 sfsfsfs 44 fgjh 55 mhである場合、後にtokenを接合して得られる:a=パラメータ1&b=パラメータ3&c=パラメータ2×tamp=タイムスタンプ&token=ddssf 22 sfsfs 44 f 5 mh
3、MD 5を暗号化して文字列署名を得る
コード実装:
戻りは署名です.
ここまでで終わり
api files('libs/rxjava-2.2.8.jar')
api files('libs/retrofit-2.3.0.jar')
api files('libs/okhttp-3.9.1.jar')
api files('libs/gson-2.6.2.jar')
api files('libs/converter-gson-2.3.0.jar')
api files('libs/adapter-rxjava2-2.3.0.jar')
api(name: 'rxandroid-2.0.2', ext: 'aar')
api files('libs/okio-1.15.0.jar')
上のライブラリ全体のダウンロードアドレス:https://download.csdn.net/download/qq_16064871/11409551
使用例を添付します:マルチパラメータリクエストとファイルダウンロードインタフェース
public interface ManagerAPI {
@Multipart
@POST("/tap/exp/attendance")
Call attendanceSave(@PartMap Map map, @Part MultipartBody.Part file);
}
直接jsonがgsonを用いて回転した構造体を返す.解析を心配する必要はありません.オンラインjson解析でJavaエンティティクラスを生成できます.android studioのプラグインも使用できます.
初期化:
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(TIMEOUT, TimeUnit.SECONDS);
builder.readTimeout(TIMEOUT, TimeUnit.SECONDS);
builder.writeTimeout(TIMEOUT, TimeUnit.SECONDS);
Retrofit.Builder rBuilder2 = new Retrofit.Builder().client(builder.build()).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJava2CallAdapterFactory.create()).baseUrl(mHostCould);
manageAPI = rBuilder2.build().create(ManagerAPI.class);
次に、データの返却を要求するパラメータを示します.
//
Map params = new HashMap<>();
params.put("code", RequestBody.create(MediaType.parse("text/plain"), device_code));
params.put("id", RequestBody.create(MediaType.parse("text/plain"), rid));
params.put("sign", RequestBody.create(MediaType.parse("text/plain"), sign));
params.put("times", RequestBody.create(MediaType.parse("text/plain"), timestamp));
MultipartBody.Part Part = MultipartBody.Part.createFormData("img", file.getName(), RequestBody.create(MediaType.parse("image/*"), file));
Call call = newUpdateAPI.attendanceSave(params, Part);
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if (response.code() == 200) {
attendance = response.body();
if (attendance != null) {
EventBus.getDefault().post(attendance);
}
}
}
@Override
public void onFailure(Call call, Throwable t) {
if(attendance != null) {
EventBus.getDefault().post(attendance);
}
}
});
これで完成です.
ここで、キー値の小さい順から大きい順にソートする:1、パラメータソートパッチはパラメータ名(sign自体を除く)に基づいてすべての要求パラメータをパラメータキー値の小さい順から大きい順にソートする:key 1=value 1&key 2=value 2&key 3=value 3.....(順番に類推)、最後に&token=tokenValue;最後にMD 5を暗号化して署名する.たとえば、インタフェースパスパラメータa=>「パラメータ1」、c=>「パラメータ2」、b=>「パラメータ3」をパラメータキー値でソートするように要求する必要があります.a=パラメータ1&b=パラメータ2&c=パラメータ3
2、tokenがddssf 22 sfsfsfs 44 fgjh 55 mhである場合、後にtokenを接合して得られる:a=パラメータ1&b=パラメータ3&c=パラメータ2×tamp=タイムスタンプ&token=ddssf 22 sfsfs 44 f 5 mh
3、MD 5を暗号化して文字列署名を得る
コード実装:
public static String createSign2(SortedMap
戻りは署名です.
String sign = StringManage.createSign2(parameters, token);
ここまでで終わり