Ich habe hier eine Funktion, die Daten von einem Remote-Server in Datei herunterlädt. Ich bin immer noch nicht sicher mit meinem Code. Meine Frage ist, was wäre, wenn während des Lesens des Streams und Speichern der Daten in eine Datei und plötzlich wurde ich im Internet getrennt, können diese Ausnahmen unten Fang solche Art von Vorfall wirklich fangen? Wenn nicht, können Sie vorschlagen, wie man mit dieser Art von Vorfall umgeht?Android: Umgang mit unerwarteten Internet-Verbindung beim Herunterladen von Daten
Hinweis: Ich rufe diese Funktion in einem Thread, so dass die Benutzeroberfläche nicht blockiert wird.
public static boolean getFromRemote(String link, String fileName, Context context){
boolean dataReceived = false;
ConnectivityManager connec = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connec.getNetworkInfo(0).isConnected() || connec.getNetworkInfo(1).isConnected()){
try {
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(link);
HttpParams params = httpClient.getParams();
HttpConnectionParams.setConnectionTimeout(params, 30000);
HttpConnectionParams.setSoTimeout(params, 30000);
HttpResponse response;
response = httpClient.execute(httpGet);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200){
HttpEntity entity = response.getEntity();
InputStream in = null;
OutputStream output = null;
try{
in = entity.getContent();
String secondLevelCacheDir = context.getCacheDir() + fileName;
File imageFile = new File(secondLevelCacheDir);
output= new FileOutputStream(imageFile);
IOUtilities.copy(in, output);
output.flush();
} catch (IOException e) {
Log.e("SAVING", "Could not load xml", e);
} finally {
IOUtilities.closeStream(in);
IOUtilities.closeStream(output);
dataReceived = true;
}
}
}catch (SocketTimeoutException e){
//Handle not connecting to client !!!!
Log.d("SocketTimeoutException Thrown", e.toString());
dataReceived = false;
} catch (ClientProtocolException e) {
//Handle not connecting to client !!!!
Log.d("ClientProtocolException Thrown", e.toString());
dataReceived = false;
}catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
dataReceived = false;
Log.d("MalformedURLException Thrown", e.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
dataReceived = false;
Log.d("IOException Thrown", e.toString());
}
}
return dataReceived;
}
Können Sie einige Beispiele geben, wie ein DefaultThreadHandler zu schaffen? Ich habe keine Erfahrung damit. Vielen Dank. – capecrawler
Ich habe sie nicht selbst im Code verwendet (kenne sie nur in der Theorie), aber ich denke, sie zu verwenden ist ziemlich geradlinig. Ich habe meine Antwort oben bearbeitet; Schau mal. – Samuh