我正在使用 Retrofit2 和 DBFlow 。将数据保存到数据库时出现问题。当我同时调用线程两次时,某些数据会重复。问题是我的List,因为这个变量是最终的。我必须设置final,因为我需要在我的帖子中使用这个List。
然后,有一种方法可以将最终删除到我的列表并替换为某些东西?
改造onResponse()
public void onResponse(Call<AdminPictures> call, Response<AdminPictures> response) {
AdminPictures apResponse = response.body();
// Here is my list
final List<PictureInfos> pictureInfos = apResponse.getPicturesList();
new Thread(new Runnable() {
@Override
public void run() {
try {
// The List is used here
for (PictureInfos infos : pictureInfos) {
if(!infos.exists()){
infos.save();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
答案 0 :(得分:2)
将列表的声明移到类的顶部并创建一个类变量......
List<PictureInfos> pictureInfos....
答案 1 :(得分:1)
答案 2 :(得分:0)
请试试这个
synchronized(this) {
for (PictureInfos infos : pictureInfos) {
if(!infos.exists()){
infos.save();
}
}}
我尝试的是首先插入线程数据,同时阻止另一个。
答案 3 :(得分:0)
也许你有两次请求并且响应两次,所以线程被剔除两次。
答案 4 :(得分:-1)
也许这很愚蠢,但您是否尝试在for循环结束时清除变量?
...
for (PictureInfos infos : pictureInfos) {
if(!infos.exists()) {
infos.save();
}
}
pictureInfos.clear();
...