-1

私はこの奇妙な問題に襲われました。

私はファイルをダウンロードするために次の方法を使用しています:

public boolean downloadSection(String link,String fileLocation,long currentlyDownloadedBytes){

     try {

                RandomAccessFile file = new RandomAccessFile(fileLocation, "rw");
                file.seek(currentlyDownloadedBytes+1);

                URL imageUrl = new URL(link);
                HttpURLConnection conn  =(HttpURLConnection)imageUrl.openConnection();
                conn.setRequestProperty("Range", "bytes=" + currentlyDownloadedBytes + "-");
                conn.setConnectTimeout(100000);
                conn.setReadTimeout(100000);
                conn.setInstanceFollowRedirects(true);

                InputStream is=conn.getInputStream();
                byte buffer[]=new byte[1024];;
                while (true) {
                    // Read from the server into the buffer
                    int read = is.read(buffer);
                    if (read == -1) {
                        break;
                    }
                   // Write buffer to file
                    file.write(buffer, 0, read);
                 }

                file.close();
                return true;
                } catch (Exception ex){
                      ex.printStackTrace();
                      return false;
                      }

 } 

このコードを使用してmp3ファイルをダウンロードすると、downloadesファイルは正常に開きますが、ダウンロードしたandroidアプリ(.apkファイル)を開くとパッケージ解析エラーが発生し、画像が開きません

助けてくださいありがとう

4

1 に答える 1

0

いくつかのことが奇妙に見えます:

a)この質問のメソッドのシグネチャを手動で追加したようです(リンクにはタイプがないため、コンパイルすらされません)。

b)2つの変数/パラメーターがあります-alreadyDownloadedBytesとcurrentlyDownloadedBytesです。#aが原因だと思いました

c)あなたは次のことをしています

file.seek(currentlyDownloadedBytes+1);

代わりにこれを行う必要があります

file.seek(currentlyDownloadedBytes);

その理由は、あなたが相殺しようとしているからです。したがって、例として、1バイトだけを読み取る場合は、オフセット1(ファイルの2番目のバイト)を探す必要があります。

d)例外がスローされてキャッチされていないかどうかを確認します。

e)currentlyDownloadedBytesまたはalreadyDownloadedBytesをどこで更新しますか?

f)私の最後の推奨事項は、アプリケーションをデバッグし、ファイル全体がダウンロードされていることを確認することです。

于 2012-09-06T20:27:35.997 に答える