因此,我一直在为Android应用程序使用Room Persistence机制,这是我的代码,用于从用户输入中收集一些数据后更新数据库:
V100
由于我已经读过某个地方,new AsyncTask<Product,Void,Void>() {
@Override
protected Void doInBackground( Product ... newProducts ) {
Producer q= new Producer();
q.setName(nm);
MyDatabase.getDatabase(getActivity()).myDao().insertProducers(q);
int id= MyDatabase.getDatabase(getActivity()).myDao().getProducerByName(nm).getId();
Product p= newProducts[0];
p.setProducerId(id);
MyDatabase.getDatabase(getActivity()).myDao().insertProducts(p);
id= MyDatabase.getDatabase(getActivity()).myDao().getProductByUpc(p.getUpcCode())[0].getId();
for ( Packaging x: packagings )
x.setProductId(id);
Packaging[] array= new Packaging[packagings.size()];
for ( int i= 0; i < packagings.size(); ++i )
array[i]= packagings.get(i);
MyDatabase.getDatabase(getActivity()).myDao().insertPackagings(array);
return null;
}
}.execute(p);
默认情况下会在其他线程中执行某些查询,所以现在我可以看到上面的代码不能被信任依次执行。我选择不执行@Dao
和onPreExecute()
中的操作,因为通过文档可以在UI线程中执行它们。
那么,这是我的问题的答案吗?使用嵌套的onPostExecute()
吗?这是一个好的做法,还是适合我在上面的代码中试图实现的目标?