サーバーからデータをダウンロードする必要があるアプリケーションを開発しています。
私は次のコードを使用していますが、ファイルのダウンロード中にスタックすることがある以外は機能します。
try{
URL url = new URL( dlUrl );
con = (HttpURLConnection) url.openConnection();
con.setConnectTimeout(1000); // timeout 1 sec
con.setReadTimeout(1000); // timeout 1 sec
// get file length
int lenghtOfFile = con.getContentLength();
is = url.openStream();
String dir = Environment.getExternalStorageDirectory() + "myvideos";
File file = new File( dir );
if( !file.exists() ){
if( file.mkdir()){
// directory succesfully created
}
}
fos = new FileOutputStream(file + "/" + "video.mp4");
byte data[] = new byte[1024];
long total = 0;
while( (count = is.read(data)) != -1 ){
total += count;
publishProgress((int)((total*100)/lenghtOfFile));
fos.write(data, 0, count);
}
} catch (Exception e) {
Log.e(TAG, "DOWNLOAD ERROR = " + e.toString() );
}
finally{
// close streams
}
問題は、使用している WIFI 接続が不安定であるか、コードに何か不足している可能性があります。
ダウンロードが停止したときに回避策を追加したいのですが、残念ながらsetReadTimeout
効果がないようです!
Stackoverflow で提案されている解決策を試しましたが、うまくいきませんでした。
ある種の設定がありませんか?
setReadTimeout が効果がない理由はありますか?