我花了几个小时寻找答案,但没有结果。
我的应用程序正在使用cameraCaptureSessions.setRepeatingRequest 并将其保存/刷新到TextureView privateTextureView 中。
我想从TextureView拍照 -> 使用AsyncTask应用过滤器 -> 将其保存到ImageView。但是收到警告 “作为原始类型 AsyncTask 的成员未经检查地调用execute(Params...)”
应用程序落在按钮单击(AsyncTask 执行)上。我哪里错了?
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
.
.
.
privateTextureView = (TextureView)findViewById(R.id.textureView);
privateTextureView.setSurfaceTextureListener(textureListener);
myTask = new ApplyFilterTask();
privateBtnGetCapture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
pictureBitmap = privateTextureView.getBitmap();
//Start MyTask
myTask.execute(pictureBitmap);
}
});
}
protected class ApplyFilterTask extends AsyncTask<Bitmap, Bitmap, Bitmap> {
@Override
protected void onPreExecute() {
int color = Color.parseColor("#ffa500");
privateImageView.setColorFilter(color);
}
@Override
protected Bitmap doInBackground(Bitmap... bitmaps) {
Bitmap bmp = bitmaps[0];
try {
ImageFilters filter = new ImageFilters();
bmp = filter.applyContrastEffect(bmp, 5);
publishProgress(bmp);
} catch (Exception e) {
//System.out.println("Error!!!! " + e);
}
return bmp;
}
@Override
protected void onProgressUpdate(Bitmap... bm) {
System.out.println("TestProgress");
privateImageView.setImageBitmap(bm[0]);
}
/*
protected void onPostExecute(Bitmap... bm) {
System.out.println("TestExecude");
privateImageView.setImageBitmap(bm[0]);
}*/
}
请您参考如下方法:
您提到的应用程序失败似乎是由于多次使用同一个 AsyncTask
。安Asynctask
只能使用一次。正如 official documentation 中提到的:
The task can be executed only once (an exception will be thrown if a second execution is attempted.)
您的代码创建一个 myTask
OnClick
中每次使用的对象事件监听器。实例化一个新的AsyncTask
每次以避免应用程序失败,如下所示。
privateBtnGetCapture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
pictureBitmap = privateTextureView.getBitmap();
AsyncTask<Bitmap, Bitmap, Bitmap> myTask = new ApplyFilterTask();
//Start MyTask
myTask.execute(pictureBitmap);
}
});
然而,IDE 提到的警告是一个单独的问题,与 myTask
的声明有关。 。您似乎已将 myTask 声明为 AsyncTask
而不是AsyncTask<Bitmap, Bitmap, Bitmap>
或ApplyFilterTask
。更改声明,警告就会消失。