我将实现FTP下载功能。它有效,但是当涉及报告进度时,我只发现只有消息改变而不是数字和条形改变
我的屏幕截图如下
以下是我的代码:
public void buttonExit(View v) {
System.exit(1);
}
public void doClick(View v){
//ftp
filename = null;
filename = "giant.mp4";
pd = new ProgressDialog(this);
pd.setTitle("EOrder");
pd.setMessage("Downloading file. Please wait...");
pd.setIndeterminate(true);
pd.setMax(100);
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setProgress(0);
pd.setCancelable(false);
pd.show();
ad = new AlertDialog.Builder(this);
ad.setTitle("EOrder");
ad.setMessage("Download Finish");
ad.setNeutralButton("OK", null);
new FTPDownload().execute(filename);
}
class FTPDownload extends AsyncTask<String , String , Void>{
boolean running = true;
Date today = Calendar.getInstance().getTime();
Format formatter = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
String reportDate = formatter.format(today);
String fileAndroid = reportDate + "_" + filename;
@Override
protected Void doInBackground(String... params) {
// TODO Auto-generated method stub
Log.d("******", "Background thread starting......");
FTPClient client = new FTPClient();
try {
Log.d("tag" , "arrived");
client.connect("newaswrissssing.win5.siteonlinetest.com");
boolean successLogin = client.login("newaswrissssing", "newaswrissssing2014cap!");
if(successLogin){
client.changeWorkingDirectory("dummy");
Log.d("tag" , "success");
long fileSize = getFileSize(client , params[0]);
client.setFileType(FTP.BINARY_FILE_TYPE);
client.enterLocalPassiveMode();
File instanceRecordDirectory = new File(Environment.getExternalStorageDirectory() + File.separator + "TVB_Movie");
if(!instanceRecordDirectory.exists()){
instanceRecordDirectory.mkdirs();
}
File instanceRecord = new File(instanceRecordDirectory.getAbsolutePath() + File.separator + fileAndroid);
if(!instanceRecord.exists()){
instanceRecord.createNewFile();
}
BufferedOutputStream desFileStream = new BufferedOutputStream(new FileOutputStream(instanceRecord.getAbsolutePath()),8*1024);
InputStream in = client.retrieveFileStream(params[0]);
Log.d("as" , String.valueOf(in));
byte[] buffer = new byte[1024];
int len1 = 0;
long total = 0;
while ((len1 = in.read(buffer)) > 0) {
total += len1; //total = total + len1
Log.d("aDDs" , String.valueOf(in));
publishProgress("" + (int)((total*100)/fileSize));
desFileStream.write(buffer, 0, len1);
}
desFileStream.flush();
desFileStream.close();
client.completePendingCommand();
in.close();
}else{
Log.d("tag" , "sosad");
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
client.logout();
client.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
protected void onProgressUpdate(String... progress) {
super.onProgressUpdate(progress);
Log.d("progress","values: "+progress[0]);
pd.incrementProgressBy(Integer.parseInt(progress[0]));
pd.setMessage("Downloading file... Progress at " + progress[0] + "%");
}
protected void onPostExecute(Void result) {
super.onPostExecute(result);
pd.dismiss();
ad.show();
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
除了使用pd.incrementProgressBy(Integer.parseInt(progress[0]));
或setProgress
之外,您还能告诉我除了其他步骤吗?
答案 0 :(得分:6)
你的ProgressDialog不应该是intellminate。您应该使用setIndeterminate
而不是false
true
pd.setIndeterminate(false);
您应该使用setProgress
代替incrementProgressBy