मेरे पास एक ऐसा फ़ंक्शन है जो दूरस्थ सर्वर से डेटा डाउनलोड करने के लिए डाउनलोड करता है। मुझे अभी भी मेरे कोड से भरोसा नहीं है। मेरा सवाल यह है कि, क्या होगा अगर स्ट्रीम को पढ़ने और डेटा को डेटा में सहेजते समय अचानक मैं इंटरनेट से डिस्कनेक्ट हो गया था, तो क्या इन पकड़ अपवादों को वास्तव में उस तरह की घटना को पकड़ सकता है? यदि नहीं, तो क्या आप इस तरह की घटना को संभालने का सुझाव दे सकते हैं?एंड्रॉइड: डेटा डाउनलोड करते समय अप्रत्याशित इंटरनेट डिस्कनेक्ट को संभालें
नोट: मैं इस फ़ंक्शन को थ्रेड में कॉल करता हूं ताकि यूआई अवरुद्ध न हो।
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;
}
आप कैसे एक DefaultThreadHandler बनाने संबंधी कुछ उदाहरण दे सकते हैं? मुझे इसे बनाने का अनुभव नहीं है। धन्यवाद। – capecrawler
मैंने उन्हें कोड में स्वयं नहीं उपयोग किया है (उन्हें केवल सिद्धांत में जानते हैं) लेकिन मुझे लगता है कि उनका उपयोग करना काफी सीधे है। मैंने ऊपर अपना जवाब संपादित किया है; जरा देखो तो। – Samuh