面向对象的小型到中型SQL数据库设计

作为一个个人项目,我想在Kotlin做一个“预算管理”应用程序,用户可以在其中输入价格和数量等各种项目和描述符。 我想将数据存储在H2数据库中,然后使用预定义的函数进行过滤和查看数据。 例如,如果用户想要知道他们在两个日期之间花了多少钱,或者他们的总支出在两个日期之间增加或减少了多少百分比,或者他们在用户定义的目标(例如储蓄账户)上的进展如何。 这是我的Github项目。 我正在使用SQL“Kotlin Exposed”API。 例如,这是我的“基本”表: package tables import org.jetbrains.exposed.sql.Column import org.jetbrains.exposed.sql.Table object Essential : Table() { val id: Column = Essential.integer(“id”).autoIncrement().primaryKey() val name: Column = Essential.varchar(“name”, length = 25) val desc: Column = Essential.varchar(“description”, length = 50) val price: Column = Essential.varchar(“price”, length = 9) val quant: Column = Essential.varchar(“quantity”, length = 25) […]

为什么房间实体不能在Android中使用不可变属性

我一直在探索房间数据库对象映射库,我觉得奇怪。 正如这个答案所暗示的,实体数据模型不能具有不可变属性。 但我检查了谷歌与kotlin持久的例子 , Room工程与不可改变的属性。 请从示例中检查这个数据类。 什么可能是这种行为的原因? 如果我们可以创建不可变的值( val属性),这可能是一个很好的function,因为这限制了程序员在创建对象之后更改唯一标识符(如id)。

如何使用espresso测试DeepLinks

我想为我所有的深层链接添加测试,启动它们并查看是否启动了所需的活动,并断言活动中显示的内容。 我该怎么做? 编辑 我结束了测试只是深入链接匹配,如https://medium.com/@singwai/testing-deep-linking-with-espresso-and-burst-5e1bdb3c5e29说。 在kotlin: @Throws(Exception::class) fun test_deepLink_isResolvedBy(url: String, canonicalActivityName: String) { val appContext = InstrumentationRegistry.getTargetContext() val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) val resolvedActivities = appContext.packageManager.queryIntentActivities(intent, PackageManager.MATCH_ALL) val resolverActivityMissing = resolvedActivities.none { it.activityInfo.packageName == appContext.packageName && it.activityInfo.name == canonicalActivityName } if (resolverActivityMissing) { fail(“$url is not resolved for $canonicalActivityName”) } } 然后我检查是否有活动解决我的url,并测试每个活动在自己的测试。

NotificationListenerService未创建

也许愚蠢的问题,但我已经花了很多时间在这个。 我有我的Kotlin听众: package pl.bmideas.michal.bmnotifier public class MyNotificationListener : NotificationListenerService() { private var apiService :BackendApi? = null; override fun onCreate() { Log.i(“MyNotificationListener” , “Creating NotificationListenerService service”) super.onCreate() (………SOMETHING ELSE…………..) } override fun onDestroy() { super.onDestroy() Log.i(TAG, “DESTROING”) (………SOMETHING ELSE…………..) } override fun onNotificationRemoved(sbn: StatusBarNotification) { val sbnInfo = StatusBarNotificationExtended(sbn) Log.i(TAG, “REMOVED”) } override fun onNotificationPosted(sbn: StatusBarNotification) […]

使用RxAndroid处理onKeyDown

我使用https://github.com/mkoslacz/Moviper为我的应用程序的Android电视盒。 只有一个活动与多个子碎片。 我只想在事件尚未处理时才将onKeyDown传播到子片段。 不使用RxJava很容易。 我可以返回一个布尔值来告诉事件已经处理或不。 有没有一种方法可以使用RxJava来处理? 我使用Kotlin作为源语言。 这是我正在尝试做的事情。 class MainActivity : ViperAiPassiveActivity(), HomeContract.View { private val keyPressSubject = BehaviorSubject.create() private lateinit var predicate: (KeyEvent) -> Boolean override fun keyPresses(predicate: (KeyEvent) -> Boolean): Observable { this.predicate = predicate return keyPressSubject } override fun createPresenter() = HomePresenter() override fun getLayoutId(): Int { return R.layout.activity_main } override fun […]

从对象中提取文本值以设置listView中的文本

我试图将我的listView中的文本设置为我FavJokes类中的字符串值。 class FavJokes { var index: Int? = null var string: String? = null } 当用户喜欢一个笑话时,我创建一个FavObject实例,并为其分配值(因为笑话存储在一个数组中)和笑话的字符串值。 val newFav = FavJokes() newFav.index = primaFreeze!! newFav.string = (“${questionProvider.quesRegistry[primaFreeze!!]}… ${answerProvider.ansRegistry[primaFreeze!!]}”) favorites.add(newFav) 当我尝试使用这个FavJoke对象的数组作为我的listView的数据源,我看到的是我的项目ID和“.FavJokes @ ee8e3e”显示在listView本身。 我不认为我应该使用字符串值来填充listView,因为对于我的setOnItemClick {}方法,我继续使用的视图将需要笑话的索引,以便用正确的笑话来填充textView 。 我是kotlin / Java的新手,3天前开始学习,但是我确实有一些Swift的经验。 在Swift中,我可以使用IndexPath对象来获取/设置我的tableView的值。 有没有这样的对象或方法,我可以访问和设置Kotlin / Java中的TextView.text值?

当setter有返回值时,如何使用setter如obj.value =“”?

我有一个android EditText,我正在设置文本属性。 通常我会使用: editText.text = “Mars” 但是setter返回一个Editable,所以看起来Kotlin试图用一个失败的String替换返回的Editable。 所以“解决方法”是: editText.setText(“Mars”) 当使用这种types的setter时,有没有更好的方法(而不是setText() )来设置文本?

将插件升级到3.0.0时出现Gradle构建错误(manifestOutputFile)

将Gradle插件版本升级到3.0.0( classpath “com.android.tools.build:gradle:3.0.0” )后,如果我尝试清理或生成项目,则会出现以下错误: A problem occurred configuring project ‘:app’. > Manifest Tasks does not support the manifestOutputFile property any more, please use the manifestOutputDirectory instead. For more information, please check https://developer.android.com/studio/build/gradle-plugin-3-0-0- migration.html * Try: Run with –stacktrace option to get the stack trace. Run with –info or –debug option to get more log output. […]

如何在对话框中显示IntelliJ JSON编辑器?

我想在Kotlin和Java开发的插件的对话框中显示下面的一种编辑器。 我尝试了下面的代码片段 editorTextField.setEnabled(true); editorTextField.setOneLineMode(false); editorTextField.setFileType(new JsonFileType()); 有人可以指出如何实现这一目标吗? 特别是我需要的行号,JSON语法突出显示和代码折叠我可以在这里看到所有的代码规范。 请帮助我学习如何在插件中使用它们。 JSON编辑器:

如何在Retrofit 2中处理POST请求响应?

我试图将appVersion和deviceName作为String发送到服务器,并获取systemDate和token为字符串作为响应。 这是我在Kotlin的POJO: class InitPost { @SerializedName(“appVersion”) @Expose var versionName: String? = null @SerializedName(“deviceName”) @Expose var manufacturer: String? = null } Api服务: @POST(“getRequest”) Call postInit(@Body InitPost initPost); 在我的活动中: apiService.postInit(initPost) .enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if(response.isSuccessful()){ Timber.d(“INIT POST SUCCESSFUL”); } } @Override public void onFailure(Call call, Throwable t) { Timber.e(“INIT POST […]