2

作成後に進行状況バーを更新しようとしています (両方とも AsyncTask 内)。進行状況ダイアログが表示され、閉じますが、更新されません。常に 0 に設定されています。私のコードは次のとおりです。 public class ImageTask extends AsyncTask {

    @Override
    protected Void doInBackground(String... saleId) {

        //Drawable drawable = getActivity().getResources().getDrawable(R.drawable.sale_image_holder);
        //Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
        //ByteArrayOutputStream stream = new ByteArrayOutputStream();
        //bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
        //byte[] imageInAsByteArray = stream.toByteArray(); // here
        ImgService imgService = new ImgService();
        imgService.addImgToSale(imageInAsByteArray, saleId[0], this);
        return null;
    }

    @Override
    protected void onProgressUpdate(Integer... progress) 
    {
        super.onProgressUpdate(progress);
        dialog.setProgress(progress[0]);
    }

    @Override
    protected void onPostExecute(Void result) {
        dialog.dismiss();
    }

    public void doProgress(int value){
        publishProgress(value);
    }
}

ImgService クラスは次のとおりです。

public class ImgService 
{
    public void addImgToSale(byte[] img, final String saleId, final ImageTask task)
    {
        final ParseFile file = new ParseFile(saleId + ".jpeg", img);
        try {
            file.save();
        } catch (ParseException e1) {
            e1.printStackTrace();
            return;
        }
        task.doProgress(50);
        ParseObject image = new ParseObject(DBDictionary.SALE_IMAGES);
        ParseObject sale = new ParseObject(DBDictionary.SALE);
        sale.setObjectId(saleId);
        image.put(DBDictionary.SALE_IMAGES_SALE_ID_P, ParseObject.createWithoutData(DBDictionary.SALE, saleId));
        image.put("image", file);
        try {
            image.save();
        } catch (ParseException e1) {
            e1.printStackTrace();
            return;
        }
        task.doProgress(100);
    }
}

ネットでは、ProgressDialog の表示と非表示には多くの問題がありましたが、進行状況の更新には問題がありませんでした。

ありがとう!

4

4 に答える 4

1

postexecute メソッドから行を削除 し、dialog.setProgress(50)以下のコードを asynctask に使用します。

protected void onProgressUpdate(Integer... values) 
                    {
                       dialog.setProgress(values[0]);    
                    }
于 2013-06-07T09:07:58.757 に答える