本文介绍了Android的进度对话框仅在更新信息,而不是栏和行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我要实现FTP下载功能。它的工作原理,但是当涉及到报告的进展情况,我只发现只有消息的变化而不是数量和酒吧变化
I am going to implement the FTP download function. It works but when it comes to reporting the progress, I have only found that only the message changes but not the numbers and the bar changing
我已经捕获屏幕下面
下面是我的code:
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(进展[0]));
或 setProgress
?
推荐答案
您ProgressDialog不应该intederminate。你应该叫 setIndeterminate
与假
而不是真正
your ProgressDialog should not be intederminate. You should call setIndeterminate
with false
instead of true
pd.setIndeterminate(false);
和你应该使用 setProgress
而不是 incrementProgressBy
这篇关于Android的进度对话框仅在更新信息,而不是栏和行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!