Вот блок кода, который должен работать в фоновом режиме, чтобы получить URI изображений для будущего использования в галерее.
Asynctask выбирает все продукты в базе данных и выполняет поиск изображений в указанной папке с тем же именем описания продукта, если оно находит, оно помещает продукт в список продуктов, который в конце асинхронной задачи объявляет глобальный var с этими значениями.
public class getIMGS extends AsyncTask<Void, Integer, Void> {
public List<Produto> pc;
@Override
protected Void doInBackground(Void... params) {
try {
TimingLogger tm = new TimingLogger("IBS", "Inicio");
dbHelper DB = new dbHelper(start.this);
Dao<Produto, Integer> daO = DB.getProdutoDao();
//QueryBuilder<Produto, Integer> qB = daO.queryBuilder();
//qB.selectColumns("CD_REF");
List<Produto> lista = daO.queryForAll();
Produto p = null;
File f = null;
int i;
for (i = 0; i<lista.size();i++) {
p = lista.get(i);
String path = Environment.getExternalStorageDirectory()+"/IBS/Imagens/"+p.getCD_REF()+".jpg";
f = new File(path);
Log.w("IBS", String.valueOf(i)+ " registros!");
if (f.exists()) {
pc.add(p); //This line generates the error
//NullPointerException, even all the values of p being filled. So, what the problem should be?
}
}
ImagesGlobal.setImages(pc);
Log.w("IMAGENS", String.valueOf(pc.size())+" de "+String.valueOf(i)+" produtos possuem imagens...");
Log.w("IMAGENS", "Processo de imagens finalizado!");
tm.addSplit("Fim Imagens");
tm.dumpToLog();
} catch (Exception e) {
Log.e("IMAGENS", e.getMessage());
}
return null;
}
}