最新のokhttpバージョンを使用しています:okhttp-2.3.0.jar
Java?でokhttpのGETリクエストにクエリパラメータを追加する方法
Androidについて 関連する質問 を見つけましたが、ここには答えがありません!
他の回答で述べたように、okhttp v2.4はこれを可能にする新しい機能を提供します。
これは、現在のバージョンのokhttpでは不可能です 。これを処理するメソッドはありません 。
次に最適なのは、URL文字列またはURL
オブジェクト(Java.net.URL
)クエリに自分自身を含め、okhttpのリクエストビルダーに渡します。
ご覧のとおり、Request.Builderは文字列またはURLのいずれかを取ることができます。
URLの構築方法の例は、 にあります。JavaでURLまたはURIを構成する慣用的な方法は何ですか?
Okhttp3の場合:
private static final OkHttpClient client = new OkHttpClient().newBuilder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();
public static void get(String url, Map<String,String>params, Callback responseCallback) {
HttpUrl.Builder httpBuider = HttpUrl.parse(url).newBuilder();
if (params != null) {
for(Map.Entry<String, String> param : params.entrySet()) {
httpBuider.addQueryParameter(param.getKey(),param.getValue());
}
}
Request request = new Request.Builder().url(httpBuider.build()).build();
client.newCall(request).enqueue(responseCallback);
}
これが私のインターセプターです
private static class AuthInterceptor implements Interceptor {
private String mApiKey;
public AuthInterceptor(String apiKey) {
mApiKey = apiKey;
}
@Override
public Response intercept(Chain chain) throws IOException {
HttpUrl url = chain.request().httpUrl()
.newBuilder()
.addQueryParameter("api_key", mApiKey)
.build();
Request request = chain.request().newBuilder().url(url).build();
return chain.proceed(request);
}
}
私はついにコードを作成しました。次のコードが皆さんに役立つことを願っています。最初にURLを作成します
HttpUrl httpUrl = new HttpUrl.Builder()
次に、URLをRequest requesthttp
に渡します。
public class NetActions {
OkHttpClient client = new OkHttpClient();
public String getStudentById(String code) throws IOException, NullPointerException {
HttpUrl httpUrl = new HttpUrl.Builder()
.scheme("https")
.Host("subdomain.apiweb.com")
.addPathSegment("api")
.addPathSegment("v1")
.addPathSegment("students")
.addPathSegment(code) // <- 8873 code passthru parameter on method
.addQueryParameter("auth_token", "71x23768234hgjwqguygqew")
// Each addPathSegment separated add a / symbol to the final url
// finally my Full URL is:
// https://subdomain.apiweb.com/api/v1/students/8873?auth_token=71x23768234hgjwqguygqew
.build();
System.out.println(httpUrl.toString());
Request requesthttp = new Request.Builder()
.addHeader("accept", "application/json")
.url(httpUrl) // <- Finally put httpUrl in here
.build();
Response response = client.newCall(requesthttp).execute();
return response.body().string();
}
}
現在(okhttp 2.4)、HttpUrl.BuilderにはaddQueryParameterメソッドとaddEncodedQueryParameterメソッドがあります。
既存のHttoUrlからnewBuilderを作成し、そこにクエリパラメーターを追加できます。サンプルインターセプターコード:
Request req = it.request()
return chain.proceed(
req.newBuilder()
.url(
req.url().newBuilder()
.addQueryParameter("v", "5.60")
.build());
.build());