我在房间里有一个实体
@Entity(foreignKeys ={
@ForeignKey(entity = Label.class, parentColumns = "_id", childColumns = "labelId", onDelete = CASCADE),
@ForeignKey(entity = Task.class, parentColumns = "_id", childColumns = "taskId", onDelete = CASCADE)
})
public class LabelOfTask extends Data{
@ColumnInfo(name = "labelId")
private Integer labelId;
@ColumnInfo(name = "taskId")
private Integer taskId;
}
Run Code Online (Sandbox Code Playgroud)
这个实体的sql语法如下
CREATE TABLE `LabelOfTask` (
`_id` INTEGER PRIMARY KEY AUTOINCREMENT,
`labelId` INTEGER,
`taskId` INTEGER,
FOREIGN KEY(`labelId`) REFERENCES `Label`(`_id`) ON UPDATE NO ACTION ON DELETE CASCADE ,
FOREIGN KEY(`taskId`) REFERENCES `Task`(`_id`) ON UPDATE NO ACTION …Run Code Online (Sandbox Code Playgroud) sqlite android database-design android-room android-architecture-components
我有一个类实体如下
@Entity
public class Task {
private String name;
private Integer ParentId;
private Integer userId;
@Ignore
private int noOfSubTask;
}
Run Code Online (Sandbox Code Playgroud)
在DAO类中有一个方法getTaskList()
@Dao
public interface TaskDao extends Dao<Task> {
@Query("SELECT *,(SELECT count(*) FROM Task b WHERE a._id = b.ParentId ) AS noOfSubTask FROM Task a ")
LiveData<List<Task>> getTaskList();
}
Run Code Online (Sandbox Code Playgroud)
我想用noOfSubTask填充由(SELECT count(*)FROM Task b WHERE a._id = b.ParentId)部分查询给出的数字,但问题是它不是一列,所以房间库不会映射它getTaskList方法in dao实现(自动生成)类.
有没有办法用dao类房间库的任何方法来填充实体的非列字段(比如我的情况下的noOfSubTask)?
java sqlite android android-room android-architecture-components
每当导入现有的 android 项目时,在大多数情况下,我们需要更改已安装工具版本号后的值
在项目/build.gradle
buildscript {
...
dependencies {
classpath 'com.android.tools.build:gradle:x.x.x'
}
}
Run Code Online (Sandbox Code Playgroud)
在项目/应用程序/build.gradle
android {
compileSdkVersion xx
buildToolsVersion "xx.x.x"
defaultConfig {
applicationId "com.example.app.xyz"
minSdkVersion xx
targetSdkVersion xx
versionCode x
versionName "x.x"
}
...
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:x.xx'
compile 'com.android.support:appcompat-v7:xx.x.x'
compile 'com.android.support:recyclerview-v7:xx.x.x'
}
Run Code Online (Sandbox Code Playgroud)
如何覆盖上述值
classpath
compileSdkVersion
buildToolsVersion
targetSdkVersion
Run Code Online (Sandbox Code Playgroud)
使用命令行参数,例如
./gradlew installDebug -PCompileSdkVersion=26 -PbuildToolsVersion=26.0.0
Run Code Online (Sandbox Code Playgroud)
或类似的东西?
我的想法是使用一个相同的命令(以我安装的 sdk 版本号作为参数)来构建任何不由我维护的项目。
如果我们必须构建由其他人管理的多个项目,这会很有帮助。它可以通过我们的命令行参数覆盖他们的构建配置来节省大量时间,这样我们就不需要每次都在每个特定位置进行更改新导入的项目。
groovy android command-line-arguments build.gradle android-gradle-plugin
您不能在像下面这样的块内声明接口
public void greetInEnglish() {
interface HelloThere {
public void greet();
}
class EnglishHelloThere implements HelloThere {
public void greet() {
System.out.println("Hello " + name);
}
}
HelloThere myGreeting = new EnglishHelloThere();
myGreeting.greet();
}
Run Code Online (Sandbox Code Playgroud)
在本 Oracle 教程中,我得到了“您不能在本地类中声明成员接口”。因为“接口本质上是静态的”。
我渴望用更合理的信息来理解这一点,为什么界面本质上是静态的?
为什么上面的代码没有意义?
提前感谢您的介绍!
android ×3
android-architecture-components ×2
android-room ×2
java ×2
sqlite ×2
build.gradle ×1
class ×1
groovy ×1
interface ×1
local ×1
oop ×1