こんにちはみんな私はapache.commons.netを使用して、SDカードからファイルzillaによって作成されたftpサーバーにファイルをアップロードしています。しかし、私がやりたいのは、ユーザーに進捗状況を表示することだけです。手伝っていただけませんか?これが私のコードです:
質問する
2707 次
3 に答える
2
まだ問題を解決していない場合に備えて。問題はこの行内にあると思います
((int) ((totalBytesTransferred/file.length())*100))
代わりにこれを試してください
publishProgress((int) ((totalBytesTransferred * 100)/file.length()))
于 2012-10-31T07:33:29.187 に答える
0
ペーストの 322 行目。
org.apache.commons.net.io.Util.copyStream(stO, stD, ftpClient.getBufferSize(),
CopyStreamEvent.UNKNOWN_STREAM_SIZE,
new CopyStreamAdapter() {
public void bytesTransferred(
long totalBytesTransferred,
int bytesTransferred,
long streamSize) {
// Your progress Control code here
Log.d("CopyStreamAdapter", "bytesTransferred(...) - " +
totalBytesTransferred + "; " +
bytesTransferred + "; " +
streamSize);
publishProgress((int) ((totalBytesTransferred/file.length())*100));
}
}
);
これが失敗の原因だと思います。文字列「CopyStreamAdapter」を含む logcat が取得されない場合は、このハンドラが起動されていないことを意味します。
于 2012-08-09T14:11:05.723 に答える
0
この行には問題があります:
publishProgress((int) ((totalBytesTransferred/file.length())*100));
totalBytesTransferred が long で File.length() が long を返すため、整数除算が行われます。したがって、この行は、totalBytesTransferred が file.length() と等しくなるまでゼロを返します。その後、100 が返されます。
このように分割する前に、totalBytesTransferred を double にキャストしてパーセンテージを取得できます。
publishProgress((int) (((double)totalBytesTransferred/file.length())*100));
于 2012-08-09T12:56:20.097 に答える