在我的android应用程序中,我保存了一些必须发送到服务器的事件。发送的所有事件,我都必须标记为“已发送”。 在我发送了所有未标记的事件(已发送= 0)后,服务器将以其保存的所有ID组成的数组进行回复。然后,在android应用程序中,我使用所有ID执行更新查询,但这不起作用。
EventDao.java
@Dao
public interface EventDao {
@Query("UPDATE Event SET sent = 1 WHERE id IN (:ids)")
void updateSent(String ids)
}
MarkEvent.java
...
DatabaseClient.getInstance(context).getDb().eventDao().updateSent(response.join(","));
Log.d("MarkEvent", response.join(","));
...
“响应”是一个只有整数的JSONArray。 当服务器回复时,我可以在Logcat中阅读此内容:
D/MarkEvent: 2,3,4,5,6,7,8
此数字是正确的记录ID
答案 0 :(得分:1)
答案 1 :(得分:0)
我更好地阅读了“ @Query”符号文档:Room Query Annotation 从文档中:
Room支持将参数列表绑定到查询。在运行时,Room将构建正确的查询以具有匹配数量的绑定参数,这取决于方法参数中的项目数。
所以我这样改变了我的道
@Dao
public interface EventDao {
@Query("UPDATE Event SET sent = 1 WHERE id IN (:ids)")
void updateSent(int[] ids)
}
在我的类MarkEvent.java中,我添加了一个静态函数(来自How to cast a JSONArray to int Array),并且修改了该调用:
public static int[] JSonArray2IntArray(JSONArray jsonArray){
int[] intArray = new int[jsonArray.length()];
for (int i = 0; i < intArray.length; ++i) {
intArray[i] = jsonArray.optInt(i);
}
return intArray;
}
...
DatabaseClient.getInstance(context).getDb().eventDao().updateSent(JSonArray2IntArray(response));
...
现在工作!谢谢。