我使用 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();
}
}