Привет, я пишу приложение android, которое использует okhttp для подключения к серверу, у меня все в порядке с уровнями API ниже 28 для подключения и получения данных с сервера, но в телефонах с android 28 и выше мне не удалось ошибка подключения к серверу. Мой первый код был:
private void getToken(){
OkHttpClient client = new OkHttpClient();
cons.phoneNumber = dbHelper.readUserMobile(api.getDatabase());
Log.i("Log40","phone in OkHttp is: "+ cons.phoneNumber);
Request request = api.loginRequest(cons.phoneNumber);
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
//my codes on failure
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
//my codes for response
}
});
}
, а моя функция api.loginRequest (cons.phoneNumber) была:
public Request loginRequest(String phoneNumber){
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody body = new FormBody.Builder()
.add("Grant_Type","password")
.add("username",phoneNumber)
.build();
//RequestBody body = RequestBody.create(mediaType, "Grant_Type=password&username="+phoneNumber);
Request request = new Request.Builder()
.url("http://"siteadress"/api/v1/User/Login")
.post(body)
.addHeader("Content-Type", "application/x-www-form-urlencoded")
.addHeader("Accept", "application/json")
.addHeader("User-Agent", "Pouya")
.addHeader("Cache-Control", "no-cache")
.addHeader("Host", "hostip:hostport")
.addHeader("Accept-Encoding", "gzip, deflate")
.addHeader("Content-Length", "40")
.addHeader("Connection", "keep-alive")
.addHeader("cache-control", "no-cache")
.build();
return request;
}
, но при этом мне не удалось подключиться к ошибке сервера: CLEARTEXT связь не включена для клиента
, поэтому я искал в Интернете и переполнении стека они сказали, что проблема была в пропущенном s после http проблема, поэтому я добавил s , но я получил новую ошибку, и ошибка:
Не удалось подключиться к серверу, javax. net .ssl.SSLHandshakeException: Сбой рукопожатия
Я снова прочитал поток стека и произвел поиск, и мой код изменился на:
private void getToken(){
OkHttpClient client = new OkHttpClient.Builder()
.connectionSpecs(Arrays.asList(ConnectionSpec.COMPATIBLE_TLS))
.build();
java.lang.System.setProperty("https.protocols", "TLSv1");
cons.phoneNumber = dbHelper.readUserMobile(api.getDatabase());
Log.i("Log40","phone in OkHttp is: "+ cons.phoneNumber);
Request request = api.loginRequest(cons.phoneNumber);
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
//my codes on failure
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
//my codes for response
}
});
}
и добавил s по адресу http в моей функции api.loginRequest (cons.phoneNumber), но я все еще получаю Не удалось подключиться к серверу, javax. net .ssl.SSLHandshakeException: Ошибка рукопожатия . кто-нибудь может помочь?