I am currently trying to add a few records into my local room DB in a sequential manner.
But It seems every time I execute a runnable on a single thread using Executor. It still returns data in random order.
Method Call
for (int i = 0; i < mImagePaths.size(); i++) {
strDate = sdf.format(c.getTime());
Sequential_Fix sequential_fix = new Sequential_Fix(lastInsertid, new MyImages(""+i, strDate, lastInsertid, mImagePaths.get(i), scantype, 0, 0, "N", "N", sync3, "Y", "Y", "Y"), i);
new DatabaseHelper(getApplicationContext()).getImageCount(sequential_fix, lastInsertid, new Callback<Long>() {
@Override
public void result(Long ong1) {
insertedIdsList.add(ong1);
}
});
}
My Method
Executor executor = Executors.newSingleThreadExecutor();
public void getImageCount(Sequential_Fix data,int lastInsertid, Callback<Long> longCallback) {
executor.execute(new Runnable() {
@Override
public void run() {
AppDatabase db = AppDatabase.getDatabase(mContext.getApplicationContext());
data.getImage().setName(String.valueOf(db.myImagesDao().getLastPosOfFolder(lastInsertid)));
Log.e(DatabaseHelper.class.getSimpleName(), "run: "+data.getPos() );
longCallback.result(db.myImagesDao().insertImage(data.getImage()));
}
});
}
LogCat
2022-09-03 15:32:47.035 15396-17206/scancan.com.myscanner E/DatabaseHelper: run: 0
2022-09-03 15:32:47.041 15396-17210/scancan.com.myscanner E/DatabaseHelper: run: 3
2022-09-03 15:32:47.042 15396-17207/scancan.com.myscanner E/DatabaseHelper: run: 1
2022-09-03 15:32:47.042 15396-17209/scancan.com.myscanner E/DatabaseHelper: run: 2
2022-09-03 15:32:47.043 15396-17212/scancan.com.myscanner E/DatabaseHelper: run: 4