0

さまざまな for ループを使用して、いくつかの png ファイルをダウンロードしようとしています。私の場合、publishProgress() メソッドをどのように正確に使用すればよいですか?

ここに私のコードがあります:

protected String doInBackground(String... params) {


    for(PlaceDetails place : places){
        for(int v = 14; v <=16; v++){   
            for (int y = 0; y <= placeBottomLeft.getYTile(); y++){
                for(int x = placeTopLeft.getXTile(); x <= placeBottomRight.getXTile(); x++){
                    try {
                        //Download some stuff here
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }

            }
        }
    }

    for (int w = zoom -1 ; w <= zoom+1; w++){
        for (int y = topLeft.getYTile(); y <= bottomLeft.getYTile(); y++){
            for(int x = topLeft.getXTile(); x <= bottomRight.getXTile(); x++){
                try {
                    //Download some stuff here again
                } catch (Exception e) {
                    Log.e("URL::: ERROR", e.getMessage());
                    e.printStackTrace();
                }
            }

        }
    }
    return null;
}

ご覧のとおり、doInBackground メソッドの 2 つの個別の for ループでコンテンツをダウンロードしようとしています。ただし、私が見た例のほとんどは、スレッドをスリープさせ、for ループ カウンター番号を publishProgress() メソッドの整数として使用するだけです。この場合、どのように使用すればよいですか?ありがとう!

編集:

さらに明確にするために、進行状況を更新して onPostExecuteMethod() で行われたことを含めることができるかどうかを知りたいです。

protected void onPostExecute (String result){
    File newFileDir = new File(Environment.getExternalStorageDirectory().toString() + "/Qiito Offline/offlineMap");
    File fileDir = new File(Environment.getExternalStorageDirectory().toString() 
            + "/test");
    try {
        Log.e("Starting :: ", newFileDir.getPath());
        File newFile = new File(newFileDir, "" + tID + ".zip");
        newFileDir.mkdirs();
        OutputStream output = new FileOutputStream(newFile);
        ZipOutputStream zipoutput = new ZipOutputStream(output);
        zip(fileDir, fileDir, zipoutput);
        zipoutput.close();
        output.close();
        deleteDirectory(fileDir);
        mNotificationHelper.completed(); //method I used for my NotificationHelper to inform that the entire process is completed
    } catch (IOException excep) {
        Log.e("ERROR!!" , excep.getLocalizedMessage());
    }
}

postExecute() で、png ファイルを別のフォルダーに圧縮しようとしており、その後、すべての png ファイルを削除しています。プログレスバーにもこれを含めることができますか? それ以外の場合は、png ファイルのダウンロードを追跡するだけで済みます。

4

1 に答える 1

1

このコードを次のように記述しdoInBackground()ます。

int totalCount  = 0; // total images count
int counter = 0; // current downloaded files count

// images - ArrayList with images
totalCount = images.size();

// download and publish progress
   int imagesCount = images.size(); 
   for (int i = 0; i < imagesCount; i++) {
            // download image

            publishProgress((int) ((counter++ / (float) totalCount) * 100));
    }
于 2012-12-26T09:53:15.763 に答える