Прежде всего, извините, если код выглядит грязным, я попытался сделать отступ, но, похоже, мне нужно больше практики.
Я выполняю 3 HTTPS-запроса в AsyncTask (doInBackground).
Каждый запрос захватывает данные сома с веб-сайта.
Я пытаюсь создать HTTPRetryHandler, который повторяет каждый запрос 3 раза.Я уже нашел хороший пример , но я не знаю, как применить это к моему коду.
Любая помощь с очень ценится, спасибо.
Я используюодин и тот же HTTPClient для каждого запроса:
public HttpClient getHttpClient() {
DefaultHttpClient client = null;
ResponseCache.setDefault(null);
try {
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null, null);
SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
// Setting up parameters
HttpParams params = new BasicHttpParams();
params.setParameter(ConnManagerPNames.MAX_TOTAL_CONNECTIONS, 30); // default 30
params.setParameter(ConnManagerPNames.MAX_CONNECTIONS_PER_ROUTE, new ConnPerRouteBean(30)); // default 30
//params.setParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, false);
HttpProtocolParams.setUseExpectContinue(params, false);
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, "UTF-8");
// Setting timeout
HttpConnectionParams.setConnectionTimeout(params, 30000);
HttpConnectionParams.setSoTimeout(params, 30000);
// Registering schemes for both HTTP and HTTPS
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https", sf, 443));
// Creating thread safe client connection manager
ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);
// Creating HTTP client
client = new DefaultHttpClient(ccm, params);
} catch (Exception e) {
client = new DefaultHttpClient();
Toast.makeText(AndroidLogin.this, "Problem with connection!", Toast.LENGTH_LONG).show();
}
return client;
}
Пример вызова в doInBackground:
/******* 2nd HTTP Request *******/
try
{
HttpPost request1 = new HttpPost("some webpage");
HttpResponse response1 = httpClient.execute(request1);
InputStream inputStreamActivity1 = response1.getEntity().getContent();
BufferedReader reader1 = new BufferedReader(new InputStreamReader(inputStreamActivity1));
StringBuilder sb1 = new StringBuilder();
String line1 = null;
String lookUp1 = "</response>";
while ((line1 = reader1.readLine()) != null)
{
sb1.append(line1);
if (line1.indexOf(lookUp1)!= -1)
{
System.out.println("Found: </response>");
HttpRequest2 = "success";
}
}
STRINGBUILD_REQUEST2 = sb1.toString();
inputStreamActivity1.close();
publishProgress(response1.toString().length());
} catch(SocketTimeoutException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.e("TAG: ", "SocketTimeoutException occured during HTTP request 2!");
}
/************* END 2nd HTTP Request *****************/