РЕШЕНИЕ: Я использовал метод «для каждого» петли в doInBackground(), как это:Как выполнить ту же самую операцию на нескольких элементов в массиве в doInBackground()
for(MyImage img:params){
//this time though for each element I saved the result in a ArrayList<>
//and returned the ArrayList<> as the result
}
Been у него пару часов, поэтому, я думаю, я просто устал. Задача решена. Извините за потраченное время и спасибо!
Мне очень тяжело пытаться выполнить одну и ту же операцию над каждым элементом, переданным в doInBackground() моей AsyncTask. Я получаю только одну операцию и результат. Массив содержит 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 [] массив? Я попытался написать цикл for внутри метода doInBackground, но это не сработало. Мне нужен результат от каждого расчета, сделанного на каждом изображении.
для цикла я попытался выглядел так:
for(MyImage img:params){
//do stuff
}
Должен ли я сохранить результат в виде списка и возвращает список как результат?
'doInBackground (MyImage ... PARAMS)' означает, что вы можете использовать 'params' в' для (MyImage изображения: Params) {... 'петля – pskink
Но я до сих пор только один результат в конец. – knerlington
, если вы не знакомы с синтаксисом '...', тогда создайте метод 'void foo (String ... parameters)' в каком-то классе и попытайтесь вызвать его, внутри этого метода используйте вышеуказанный цикл для вывода параметров, делая что вы узнаете, как назвать метод 'foo' – pskink