Wie können Sie einen Fortschrittsdialog läuft nicht mehr, wenn Netzwerkzugriff fällt?
-
09-10-2019 - |
Frage
Ich habe eine Anwendung, die für die Verarbeitung zu greifen XML auf eine Website geht. Dieser Prozess ist in einem separaten Thread und funktioniert gut, wenn ich 3G oder WiFi zur Verfügung haben. Ich habe auch Code, der überprüft das Signal, bevor sie tatsächlich den Faden, so dass es nicht versuchen wird, mit keine Verbindung .
Während meiner Tests ging ich in ein Gebäude, das alle Signal blockiert, so der Prozess gestartet, während ich draußen war und hatte Signal, aber wenn ich innerhalb des Signals ging fallen gelassen und mein Fortschritt dialog nur in Betrieb gehalten, ich musste das Programm manuell heruntergefahren, um es zu gewinnen.
Gibt es ein guter Weg, damit umzugehen, ohne dass der Benutzer manuell die App heruntergefahren, wenn diese Situation passiert?
Lösung
Supply timeout parameters to your HttpClient
and catch SocketTimeOutException
HttpParams httpParams=new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 5000);
HttpConnectionParams.setSoTimeout(httpParams, 5000);
HttpClient httpClient=new DefaultHttpClient(httpParams);
try {
httpClient.execute(new HttpGet("http://myserver.xml"));
}
catch(SocketTimeoutException ex){
//Perform Timeout i.e. cancle progress dialog
}
catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}