I'm uploading a file on FTP using Apache and Async. The problem is that on big files (i.e. 200 Mb) the progress bar restarts its progress but the upload is continuing (I checked on FTP from computer).
This is what I see in Logcat:
1->2->3->4->5->6->7->8-> -8 -> -7 .... to 8 and starts again
Async Background code:
con = new FTPClient();
con.setConnectTimeout(300000);
con.setDataTimeout(300000);
// con.setKeepAlive(true);
con.connect("host IP",21);
if (con.login("user", "password"))
{
con.enterLocalPassiveMode(); // important!
con.setFileType(FTP.BINARY_FILE_TYPE);
boolean directoryExists = con.changeWorkingDirectory(Email);
File CloudVersionSysForRestore = new File(getFilesDir()+File.separator+"Cloud Version.itb");
try {
CloudVersionSysForRestore.createNewFile();
OutputStream OutstreamCloud = new FileOutputStream(new File(CloudVersionSysForRestore.getPath()));
con.retrieveFile("/"+Email+"/Cloud Version.itb", OutstreamCloud);
OutstreamCloud.close();
if(x!=2){
BufferedReader bufferedReader = new BufferedReader(new FileReader(new File(getFilesDir()+File.separator+"Cloud Version.itb")));
String read;
StringBuilder builder = new StringBuilder("");
while((read = bufferedReader.readLine()) != null) {
Log.w("READ", read);
builder.append(read);
}
bufferedReader.close();
long getintfromstring = Long.parseLong(builder.toString());
if(getintfromstring<Version){
Log.w("Version", String.valueOf(Version));
try{
/************************************ UPLOAD + Progress ****************************/
long fileSize = DBToUploadFromInternalStorage.length();
int sentBytes = 0;
InputStream inputStream = new FileInputStream(DBToUploadFromInternalStorage);
System.out.println("Start uploading second file");
OutputStream outputStream = con.storeFileStream("PilotLogbookDB.itb");
byte[] bytesIn = new byte[4 * 1024];
int read1 = 0;
while ((read1 = inputStream.read(bytesIn)) !=-1) {
outputStream.write(bytesIn, 0, read1);
sentBytes+=read1;
final int progress = (int) ((sentBytes * 100) / fileSize);
runOnUiThread(new Runnable() {
public void run() {
pd.setProgress(progress);
Log.w("Progress", String.valueOf(progress));
}
});
}
outputStream.close();
inputStream.close();
/************************************ UPLOAD + Progress ****************************/
}
catch(Exception e){
e.printStackTrace();
x=2;
}
boolean completed = con.completePendingCommand();
For Long is it like this?
/************************************ UPLOAD + Progress ****************************/
long fileSize = DBToUploadFromInternalStorage.length();
long sentBytes = 0;
InputStream inputStream = new FileInputStream(DBToUploadFromInternalStorage);
System.out.println("Start uploading second file");
OutputStream outputStream = con.storeFileStream("PilotLogbookDB.itb");
byte[] bytesIn = new byte[4 * 1024];
int read1 = 0;
while ((read1 = inputStream.read(bytesIn)) !=-1) {
outputStream.write(bytesIn, 0, read1);
sentBytes+=read1;
final long progress = (long) ((sentBytes * 100) / fileSize);
runOnUiThread(new Runnable() {
public void run() {
pd.setProgress(Long.bitCount(progress));
Log.w("Progress", String.valueOf(progress));
}
});
}
outputStream.close();
inputStream.close();
/************************************ UPLOAD + Progress ****************************/