0

firebase ml kit を使用して、ギャラリーのすべての画像の画像ラベル付けをコーディングしました。しかし、私が AsyncTask を扱うのは非常に長い作業でした。

Toast の onProgressUpdate() で画像のラベリングの進行状況を表示したかったのですが、うまくいきません。基本的にコンテキストを使用する必要がありますが、AsyncTask は static 内部クラスであり、コンテキストを取得するには、そのメソッドにコンテキスト変数を送信する必要があります。

しかし、 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();
    }
}
4

0 に答える 0