如何在AsyncTask的onProgressUpdate中使用Toast?

时间:2018-08-17 08:11:09

标签: android firebase android-asynctask android-context firebase-mlkit

我使用Firebase ml套件对画廊的所有图像进行了图像标签编码。但这任务太长了,我确实要处理AsyncTask。

我想在Toast的onProgressUpdate()中显示图像标签的进度,但是它不起作用。本质上,我必须使用上下文,但是AsyncTask是静态内部类,并且要获取上下文,必须将上下文变量发送给该方法。

但是在内部静态类中,doInBackground()都是这样。如何传递上下文变量?

private static class ImageLabelTask extends AsyncTask<Void, Double, Void> {

    @Override
    protected Void doInBackground(Void... voids) {
        for(FirebaseVisionImage image : firebaseVisionImages) {
            detector.detectInImage(image).addOnSuccessListener(new OnSuccessListener<List<FirebaseVisionLabel>>() {
                @Override
                public void onSuccess(List<FirebaseVisionLabel> firebaseVisionLabels) {
                    allLabels.addAll(firebaseVisionLabels);
                    Double percent = ((double)allLabels.size()/(double)numOfLabel)*100.0;
                    DecimalFormat df = new DecimalFormat("#.##");
                    publishProgress(Double.parseDouble(df.format(percent)));
                }
            });
        }
        return null;
    }

    @Override
    protected void onProgressUpdate(Context context, Double... values) {
        Toast.makeText(GalleryActivity.this, String.valueOf(values[0])+"%",Toast.LENGTH_SHORT).show();
    }
}

0 个答案:

没有答案