UPDATE
代码为com.squareup.okhttp3:okhttp:3.0.1
mTextView = (TextView) findViewById(R.id.textView);
mHandler = new Handler(Looper.getMainLooper());
final Request request = new Request.Builder()
.url("https://...")
.post(formBody)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
Log.e(LOG_TAG, e.toString());
mHandler.post(new Runnable() {
@Override
public void run() {
String message = request.toString() + "\r\n" + e.toString();
mTextView.setText(message);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
try {
JSONObject jsonObject = new JSONObject(response.body().string());
final String message = jsonObject.toString(5);
Log.i(LOG_TAG, message);
mHandler.post(new Runnable() {
@Override
public void run() {
mTextView.setText(message);
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
});
因为你的项目使用OkHttp v3.0.0-RC1,因此要修复该异常,您的代码应如以下示例所示:
OkHttpClient client = new OkHttpClient.Builder()
.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
})
.build();
Request request = new Request.Builder()
.url("https://...")
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(final Request request, final IOException e) {
// do something...
}
@Override
public void onResponse(Response response) throws IOException {
// do something...
}
});
然而,代替return true;
上面,我建议你阅读谷歌的文档主机名验证的常见问题了解更多信息。
另一个有用的链接是OkHttp 的 HTTPS wiki.
希望能帮助到你!
P/S:请注意,我使用 OkHttp 的异步方式(在 client.newCall(request).enqueue(new Callback()...) 处,您也可以使用同步方式作为您的代码。