【发布时间】:2015-11-24 06:29:23
【问题描述】:
解决方案:我在 doInBackground() 方法中使用了“for each”循环,如下所示:
for(MyImage img:params){
//this time though for each element I saved the result in a ArrayList<>
//and returned the ArrayList<> as the result
}
玩了几个小时,所以我想我只是累了。问题解决了。很抱歉浪费您的时间,谢谢!
我很难对 AsyncTask 的 doInBackground() 中传递的每个元素执行相同的操作。我只得到一个操作和结果。该数组包含 10 个元素。
private class ImageComparator extends AsyncTask<MyImage, Integer, Double>{
private SQLiteImageDatabase database;
@Override
protected void onPreExecute(){
//prepare database
database = DetailActivity.this.database;
}
@Override
protected Double doInBackground(MyImage... params) {
Log.d("doInBack", "doInBack reached");
//add as record and calc image features
params[0].createPixelArrayFromBitmap();
params[0].getRGBFromPixels(params[0].getPixels());
params[0].getHistogram().calcOccurrenceOfValues(params[0].getrValues(), Histogram.colorComponent.RED);
params[0].getHistogram().calcOccurrenceOfValues(params[0].getgValues(), Histogram.colorComponent.GREEN);
params[0].getHistogram().calcOccurrenceOfValues(params[0].getbValues(), Histogram.colorComponent.BLUE);
params[0].getHistogram().calcMeanValueFromOccurrences(params[0].getHistogram().getrOccurrence(), Histogram.colorComponent.RED);
params[0].getHistogram().calcMeanValueFromOccurrences(params[0].getHistogram().getgOccurrence(), Histogram.colorComponent.GREEN);
params[0].getHistogram().calcMeanValueFromOccurrences(params[0].getHistogram().getbOccurrence(), Histogram.colorComponent.BLUE);
//compare images
double result = imageHandler.calcEuclideanDistanceBetweenImages(imageHandler.getCurrentImage(), params[0]);
return result;
}
@Override
protected void onPostExecute (Double result){
Log.d("compare","distance after comparison: "+result);
}
当我执行我的 AsyncTask 时,我像这样传递一个数组 MyImage[]
ImageComparator comparator = new ImageComparator();
comparator.execute(imageHandler.getImages().toArray(new MyImage[imageHandler.getImages().size()]));
这是否对传递的 MyImage[] 数组中的每个元素执行相同的操作?我尝试在 doInBackground 方法中编写一个 for 循环,但这不起作用。我需要对每张图像进行的每次计算的结果。
我尝试的 for 循环如下所示:
for(MyImage img:params){
//do stuff
}
我应该将结果保存在列表中并将列表作为结果返回吗?
【问题讨论】:
-
doInBackground(MyImage... params)表示您可以在for (MyImage image : params) {...循环中使用params -
但我最后还是只得到一个结果。
-
如果你不熟悉
...语法然后在某个类中创建一个方法void foo(String... parameters)并尝试调用它,在该方法中使用上面的循环输出参数,这样做你会学习如何调用foo方法 -
您应该发布您的解决方案作为您自己问题的答案,然后接受它。这样一来,正确答案就一目了然了。在该答案中,您应该显示 AsyncTask 的完整代码,并实现了 foreach() 循环。这样一来,其他发现此问题的人就会更有帮助。