1

こんにちはみんな私はapache.commons.netを使用して、SDカードからファイルzillaによって作成されたftpサーバーにファイルをアップロードしています。しかし、私がやりたいのは、ユーザーに進捗状況を表示することだけです。手伝っていただけませんか?これが私のコードです:

http://pastie.org/4433482

4

3 に答える 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 に答える