Я использую Volley в Android для выполнения запросов на приложение. К сожалению, я получаю следующее сообщение об ошибке:Исключение SSL при использовании Volley
com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x61e15f78: Failure in SSL library, usually a protocol error
error:1407743E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert inappropriate fallback (external/openssl/ssl/s23_clnt.c:744 0x5b647c58:0x00000000)
Я использую два Fragments
, внутри ViewPager
, что запросить их содержание во время onResume. URL-адрес запросов в основном одинаковый, но для параметра запроса (который задает тип содержимого, например, тренд против горячего).
Адрес указан в форме https://host/api/content?type={hot/trending}
. Авторизация выполняется через заголовок запроса.
Странная часть об этом исключении состоит в том, что только один из двух запросов терпит неудачу, и время от времени оно меняется. После того, как я добавил задержку между ними, исключение прекратилось (странно указывая на какое-то состояние гонки?). Но это кажется плохим обходным решением, и я бы хотел решить это правильно.
Любые мысли о том, что может быть причиной этого?
EDIT:
Запрос создается стандартным способом, используя синглтона обеспечение очереди следующим образом:
final RequestQueue requestQueue = RequestQueueSingleton.getInstance(getActivity()).getRequestQueue();
final GsonRequestGet<SearchApiWrapper> gsonRequest = new GsonRequestGet<>(clazz, url,successListener, errorListener);
gsonRequest.setRetryPolicy(new DefaultRetryPolicy(3000, 3, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
gsonRequest.setTag(mTag);
requestQueue.add(gsonRequest);
А вот класс синглтон:
public class RequestQueueSingleton {
private static RequestQueueSingleton mInstance;
private RequestQueue mRequestQueue;
private Context mContext;
public RequestQueueSingleton(Context context) {
mContext = context;
mRequestQueue = getRequestQueue();
}
/**
* Returns a instance of this singleton
*/
public static synchronized RequestQueueSingleton getInstance(Context context) {
if (mInstance == null) {
mInstance = new RequestQueueSingleton(context);
}
return mInstance;
}
/**
* Returns instance of the request queue
*/
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(mContext.getApplicationContext());
}
return mRequestQueue;
}
}
Как вы создаете свой запрос на Volley RequestQueue? – GuilhE
Взгляните на это http://stackoverflow.com/questions/22564317/https-support-for-volley-android-networking-library – EE66
@GuilhE Я отредактировал код, чтобы добавить логику создания requestQueue и как я ее использую. –