我所要做的就是从insert中获取作为long的返回值。我得到了,但它不起作用,我从返回的值中返回0。我正在使用一个DAO
、存储库和ViewModel
,如谷歌代码实验室中所述。在房间里插入后,我一直关注这篇文章。
球员级别
@Entity(tableName = "player_table")
public class Player {
@PrimaryKey(autoGenerate = true)
private long id;
@NonNull
@ColumnInfo(name = "username")
private String username;
}
道
@Insert
long insert(Player player);
存储库
public long insert(Player player) {
new insertAsyncTask(mPlayerDao).execute(player);
rowId = player.getId();
return rowId;
}
视图模型
public long insert(Player player){
rowId = mRepository.insert(player);
return rowId;
}
活动
String playerString = editTextUsername.getText().toString();
Player player = new Player(playerString);
long rowId = mDreamViewModel.insert(player);
存储库类中的insert
方法可以更改为:
public long insert(Player player) {
return new insertAsyncTask(mPlayerDao).execute(player).get();
}
我通过搜索GitHub找到了最后两种类型为“虚空,长”的异步任务,以及其他一些特定于房间的术语。
在调试我自己的应用程序时,我看到insert
方法中的return语句的执行发生在doInBackground
方法执行之前,这在我看到它发生之后似乎很明显。
问题是你需要返回玩家。AsyncTask
完成后台插入工作之前的getId();您必须等待,直到它向您提供正确的插入结果,这里有一个建议的解决方案,使用线程安全的倒计时闩锁
,它使用暂停后续代码的执行。等待()
方法,直到CountDownLatch
的计数达到0;每次递减1。已调用倒计时()
。
public class Repository {
private long rowId = -1;
private CountDownLatch mLatch;
public long insert(Player player) {
mLatch = new CountDownLatch(1);
new insertAsyncTask(mPlayerDao).execute(player);
try {
mLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.i("LOG_TAG", String.valueOf(rowId));
return rowId;
}
class insertAsyncTask extends AsyncTask<Player, Void, Void> {
@Override
protected Void doInBackground(Player... players) {
rowId = mDatabase.getContactDAO().addContact(players[0]);
mLatch.countDown();
return null;
}
}
}
我一直在使用codelabs实现我的房间数据库持久化。现在,在将数据插入房间数据库后,我正在尝试获取最新的rowID。但是,我被困在存储库中,试图从异步任务返回rowID。 LogEntity.java 洛格道。JAVA 日志数据库。JAVA 日志存储库。JAVA 我放了两个星号,因为我不确定在这里要做什么来获取insert RowID,以及我的AsyncTask是否完全正确。 LogViewMo
我正在我的项目中使用room persistent library。我试图在查询中使用'like'子句,但我无法使用。我尝试过编译时(查询)和运行时查询(原始查询)。它既没有给出任何类型的异常,也没有给出任何输出。 我尝试过以下方法,但都不奏效:- > 编译时查询- 罗奎尔- ComileSdkVersion 27 库使用-实现"android.arch.persistence.room:运行时:
在maven包中,我有一个奇怪的行为。我有一个工件“A”,它取决于“B”。 在“A”中,我有一个包含persistence.xml的META-INF文件夹,在“B”中,我也有一个包含persistence.xml的META-INF文件夹。 这是pom关于shade插件和依赖项的文件A 考虑到“B”也是一个阴影工件,如何从“B”中排除持久.xml文件?
问题内容: 我想做这个列不能为null,但是当我在数据库中插入一个寄存器值null时,这允许我插入。我阅读了文档,但我不知道为什么不起作用。 谢谢 更新:我正在使用 Toplink 和java org.eclipse.persistence.eclipselink:2.4.2 。 问题答案: 我认为如果您使用EntityManager的实现生成模式,则会使用可为空的。我不知道是否也必须在持久化实体
我正在使用Hazelcast进行集群数据分发。我阅读了有关使用MapStore和MapLoader接口的数据持久性的文档。我需要实现这些接口,并在hazelcast中编写类名。xml文件。 有没有使用hazelcast实现这些文件持久性接口的示例?有人知道我可以下载和使用的任何源代码或jar文件吗? 谢谢
问题内容: 最近我一直在阅读关于bout node js的文章,并且聊天功能似乎非常好。但是,我见过的唯一聊天示例基本上是将聊天服务器广播到固定的URL(例如会议室)。是否可以部分使用节点js创建更像gchat的聊天客户端?-在当前页面上弹出一个聊天窗口,然后在多个页面中保留。有人看到过这样的例子吗? 如果不是,是否有其他技术用于此目的的建议(我知道其他问题已回答)? 谢谢。 问题答案: 我将为您