使用dataoutputstream的write方法实现进度条 [英] Progress bar implementation with write method of dataoutputstream
本文介绍了使用dataoutputstream的write方法实现进度条的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
是否可以在以下代码中加入水平进度条?我在想 os AsyncTask 但后来我意识到,我无法将整数值传递给 doInBackground() 中的 ProgressUpdate() 方法.请帮忙!
Is it possible to incorporate a horizontal progress bar in the following code? I was thinking os AsyncTask but then I realized, I can't pass an integer value to ProgressUpdate() method inside doInBackground(). Please help!
public void sendFileDOS() throws FileNotFoundException {
runOnUiThread( new Runnable() {
@Override
public void run() {
registerLog("Sending. . . Please wait. . .");
}
});
final long startTime = System.currentTimeMillis();
final File myFile= new File(filePath); //sdcard/DCIM.JPG
byte[] mybytearray = new byte[(int) myFile.length()];
FileInputStream fis = new FileInputStream(myFile);
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);
try {
dis.readFully(mybytearray, 0, mybytearray.length);
OutputStream os = socket.getOutputStream();
//Sending file name and file size to the server
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF(myFile.getName());
dos.writeLong(mybytearray.length);
dos.write(mybytearray, 0, mybytearray.length);
dos.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
runOnUiThread( new Runnable() {
@Override
public void run() {
long estimatedTime = (System.currentTimeMillis() - startTime)/1000;
registerLog("File successfully sent");
registerLog("File size: "+myFile.length()/1000+" KBytes");
registerLog("Elapsed time: "+estimatedTime+" sec. (approx)");
registerLog("Server stopped. Please restart for another session.");
final Button startServerButton=(Button)findViewById(R.id.button1);
startServerButton.setText("Restart file server");
}
});
}
推荐答案
您可以使用 AsyncTask 来获得这样的进度条:
You can use AsyncTask that gets a progress bar like that:
public abstract class BaseTask extends AsyncTask<String, Integer, String>
{
private ProgressBar m_progressBar;
protected BaseTask(ProgressBar p)
{
m_progressBar = p;
}
@Override
protected void onPreExecute()
{
if (m_progressBar != null)
{
m_progressBar.setProgress(0);
}
}
@Override
protected void onPostExecute(String result)
{
if (m_progressBar != null)
m_progressBar.setVisibility(ProgressBar.GONE);
}
public void OnProgress(int prog)
{
if (m_progressBar != null)
{
m_progressBar.setProgress(prog);
}
}
}
要在您的 xml 中添加进度条:
To add a progress bar in your xml:
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp" />
在代码中初始化进度条:
To initialize the progress bar in your code:
ProgressBar p = (ProgressBar)findViewById(R.id.progressBar);
p.setVisibility(ProgressBar.VISIBLE);
p.setMax(100);
这篇关于使用dataoutputstream的write方法实现进度条的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文