ओप्स उत्तर स्पष्ट था। बेवकूफ सवाल के लिए खेद है। बस सामान्य रूप से इनपुटस्ट्रीम पढ़ने की जरूरत है।
private class AsyncDownloader extends AsyncTask<Void, Long, Boolean> {
private final String URL = "file_url";
@Override
protected Boolean doInBackground(Void... params) {
OkHttpClient httpClient = new OkHttpClient();
Call call = httpClient.newCall(new Request.Builder().url(URL).get().build());
try {
Response response = call.execute();
if (response.code() == 200) {
InputStream inputStream = null;
try {
inputStream = response.body().byteStream();
byte[] buff = new byte[1024 * 4];
long downloaded = 0;
long target = response.body().contentLength();
publishProgress(0L, target);
while (true) {
int readed = inputStream.read(buff);
if(readed == -1){
break;
}
//write buff
downloaded += readed;
publishProgress(downloaded, target);
if (isCancelled()) {
return false;
}
}
return downloaded == target;
} catch (IOException ignore) {
return false;
} finally {
if (inputStream != null) {
inputStream.close();
}
}
} else {
return false;
}
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
@Override
protected void onProgressUpdate(Long... values) {
progressBar.setMax(values[1].intValue());
progressBar.setProgress(values[0].intValue());
textViewProgress.setText(String.format("%d/%d", values[0], values[1]));
}
@Override
protected void onPostExecute(Boolean result) {
textViewStatus.setText(result ? "Downloaded" : "Failed");
}
}
स्रोत
2014-09-30 07:31:05
वहाँ यह करने के लिए एक और अधिक सुरुचिपूर्ण रास्ता नहीं है ? OkHttpClient.newCall (अनुरोध) की तरह .notify प्रगति (कॉलबैक) ... या ऐसा कुछ ... – josketres
ग्रेट उत्तर लेकिन एक और सवाल ... मैं देखता हूं कि हमारे पास इनपुटस्ट्रीम है ... फ़ाइल को पास करने के लिए हम पूरी स्ट्रीम के माध्यम से फिर से लूप करना है और इसे एक फ़ाइल में परिवर्तित करना है? क्या आप दिखा सकते हैं कि आप वास्तव में फ़ाइल ऑब्जेक्ट कैसे प्राप्त कर सकते हैं जिसे डाउनलोड किया गया है? –
@MarcusGabilheri क्या आप इसके बारे में बात कर रहे हैं? http://stackoverflow.com/a/10857407/1979290 –