jskubick

jskubick

Kotlin and Android Development featuring Jetpack: Error in generated Game.java (page 136)

I’m under the impression that when the reader gets to page 136 (“View Data with the Database Inspector”), the code SHOULD be able to build without errors.

Reasons for the assumption:

  • The Database Inspector ISN’T appearing (as far as I can tell, in Arctic Fox, it was moved to the “App Inspection” tab and no longer exists as a Tool window of its own).

  • I assume the act of successfully building and running the app is what creates and populates the database on the emulator, and…

  • once that database exists, Android Studio notices it & reveals the Database Inspector functionality.

There are no visible errors in the sourcecode itself (no red squiggly lines in any editable source files, no red marks along the right margin), but I’m getting a slew of errors in the generated app/build/tmp/kapt3/stubs/debug/dev/mfazio/pennydrop/data/Game.java class, PennyDropDao.java, and Player.java (note: all are *.java and presumably generated, the *.kt files seem to be fine) that I’m not sure how to troubleshoot:

C:\src\experiments\android\PennyDrop\app\build\tmp\kapt3\stubs\debug\dev\mfazio\pennydrop\data\Game.java:7: warning: There are multiple good constructors and Room will pick the no-arg constructor. You can use the @Ignore annotation to eliminate unwanted constructors.
public final class Game {
             ^
C:\src\experiments\android\PennyDrop\app\build\tmp\kapt3\stubs\debug\dev\mfazio\pennydrop\data\Game.java:11: error: Cannot find setter for field.
    private final dev.mfazio.pennydrop.data.GameState gameState = null;
                                                      ^
C:\src\experiments\android\PennyDrop\app\build\tmp\kapt3\stubs\debug\dev\mfazio\pennydrop\data\Game.java:13: error: Cannot find setter for field.
    private final java.time.OffsetDateTime startTime = null;
                                           ^
C:\src\experiments\android\PennyDrop\app\build\tmp\kapt3\stubs\debug\dev\mfazio\pennydrop\data\Game.java:15: error: Cannot find setter for field.
    private final java.time.OffsetDateTime endTime = null;
                                           ^
C:\src\experiments\android\PennyDrop\app\build\tmp\kapt3\stubs\debug\dev\mfazio\pennydrop\data\Game.java:17: error: Cannot find setter for field.
    private final java.util.List<java.lang.Integer> filledSlots = null;
                                                    ^
C:\src\experiments\android\PennyDrop\app\build\tmp\kapt3\stubs\debug\dev\mfazio\pennydrop\data\Game.java:19: error: Cannot find setter for field.
    private final java.lang.Integer lastRoll = null;
                                    ^
C:\src\experiments\android\PennyDrop\app\build\tmp\kapt3\stubs\debug\dev\mfazio\pennydrop\data\Game.java:21: error: Cannot find setter for field.
    private final java.lang.String currentTurnText = null;
                                   ^
C:\src\experiments\android\PennyDrop\app\build\tmp\kapt3\stubs\debug\dev\mfazio\pennydrop\data\Game.java:22: error: Cannot find setter for field.
    private final boolean canRoll = false;
                          ^
C:\src\experiments\android\PennyDrop\app\build\tmp\kapt3\stubs\debug\dev\mfazio\pennydrop\data\Game.java:23: error: Cannot find setter for field.
    private final boolean canPass = false;
                          ^
C:\src\experiments\android\PennyDrop\app\build\tmp\kapt3\stubs\debug\dev\mfazio\pennydrop\data\Game.java:7: warning: There are multiple good constructors and Room will pick the no-arg constructor. You can use the @Ignore annotation to eliminate unwanted constructors.
public final class Game {
             ^
C:\src\experiments\android\PennyDrop\app\build\tmp\kapt3\stubs\debug\dev\mfazio\pennydrop\data\Game.java:11: error: Cannot find setter for field.
    private final dev.mfazio.pennydrop.data.GameState gameState = null;
                                                      ^
C:\src\experiments\android\PennyDrop\app\build\tmp\kapt3\stubs\debug\dev\mfazio\pennydrop\data\Game.java:13: error: Cannot find setter for field.
    private final java.time.OffsetDateTime startTime = null;
                                           ^
C:\src\experiments\android\PennyDrop\app\build\tmp\kapt3\stubs\debug\dev\mfazio\pennydrop\data\Game.java:15: error: Cannot find setter for field.
    private final java.time.OffsetDateTime endTime = null;
                                           ^
C:\src\experiments\android\PennyDrop\app\build\tmp\kapt3\stubs\debug\dev\mfazio\pennydrop\data\Game.java:17: error: Cannot find setter for field.
    private final java.util.List<java.lang.Integer> filledSlots = null;
                                                    ^
C:\src\experiments\android\PennyDrop\app\build\tmp\kapt3\stubs\debug\dev\mfazio\pennydrop\data\Game.java:19: error: Cannot find setter for field.
    private final java.lang.Integer lastRoll = null;
                                    ^
C:\src\experiments\android\PennyDrop\app\build\tmp\kapt3\stubs\debug\dev\mfazio\pennydrop\data\Game.java:21: error: Cannot find setter for field.
    private final java.lang.String currentTurnText = null;
                                   ^
C:\src\experiments\android\PennyDrop\app\build\tmp\kapt3\stubs\debug\dev\mfazio\pennydrop\data\Game.java:22: error: Cannot find setter for field.
    private final boolean canRoll = false;
                          ^
C:\src\experiments\android\PennyDrop\app\build\tmp\kapt3\stubs\debug\dev\mfazio\pennydrop\data\Game.java:23: error: Cannot find setter for field.
    private final boolean canPass = false;
                          

Any idea which class to even start looking at to figure out what’s wrong? I’m guessing I forgot an annotation somewhere… or possibly, in an attempt to fix an earlier typo problem by copying files from the .zip file, might have created a bigger one by prematurely copying something mentioned later in the chapter that’s now triggering the error above by expecting the presence of something that officially hasn’t been added yet as of page 136.

For what it’s worth, it looks like the following methods of PennyDropDao.kt haven’t yet been mentioned as of page 136, but are in the .zip file’s version, and the references to them by the lines added prior to page 136 will generate errors in PennyDropDao.kt itself unless they’re added:

getPlayer()
insertGame()
insertPlayer()
insertPlayers()
updateGame()

According to WinMerge, my versions of Converters.kt, Game.kt, GameState.kt, GameStatus.kt, PennyDropDatabase.kt, and PennyDropRepository.kt are presently identical to the versions in the zipfile.

As far as I can recall, my copy of PennyDropDao.kt was identical, until I commented the methods out, then went through chapter 5 from the start and moved the methods from inside the comment block to the outside in the order they’re mentioned in the chapter. That’s how I noticed that 5 methods listed above were referenced by the code, but not mentioned yet as of page 136… they were still in the comment block as of page 136.

Marked As Solved

mfazio23

mfazio23

Author of Kotlin and Android Development featuring Jetpack

Jeff, I think I got it. The book was written against Room 2.3.0-beta01 which doesn’t play nice with Kotlin 1.5.30. If you upgrade your Room dependency to 2.3.0, it should work without trouble.

Please let me know either way!

Also Liked

mfazio23

mfazio23

Author of Kotlin and Android Development featuring Jetpack

Hey Jeff,
I’m looking through what you have here and I’m trying to figure out what’s going on.

The first thing I want to hit are those five functions from PennyDropDao. All five are on pages 118 and 119 when we first create the abstract class. Are these the functions you’re referencing here?

The issue with the Game class looks familiar from my initial development work, though I do not remember what caused that specific problem. Could you share what your Game class looks like? And an offer: if you wanted to upload your work to GitHub or something similar, I’d be willing to troubleshoot things that way with you. I want to make sure you can get as much as possible out of the book.

For reference, you’re right on point with the *.java files being generated. :+1: Also, you’re correct on the Database Inspector being moved in Arctic Fox. I’m really starting to dislike this new Android Studio update.

Let me know on your Game class (and if you want to put the whole project out somewhere I can access it) and we’ll go from there!

jskubick

jskubick

OK, that fixed it. Thanks!!!

Where Next?

Popular Pragmatic Bookshelf topics Top

New
telemachus
Python Testing With Pytest - Chapter 2, warnings for “unregistered custom marks” While running the smoke tests in Chapter 2, I get these...
New
sdmoralesma
Title: Web Development with Clojure, Third Edition - migrations/create not working: p159 When I execute the command: user=&gt; (create-...
New
gilesdotcodes
In case this helps anyone, I’ve had issues setting up the rails source code. Here were the solutions: In Gemfile, change gem 'rails' t...
New
Chrichton
Dear Sophie. I tried to do the “Authorization” exercise and have two questions: When trying to plug in an email-service, I found the ...
New
leonW
I ran this command after installing the sample application: $ cards add do something --owner Brian And got a file not found error: Fil...
New
brunogirin
When installing Cards as an editable package, I get the following error: ERROR: File “setup.py” not found. Directory cannot be installe...
New
oaklandgit
Hi, I completed chapter 6 but am getting the following error when running: thread 'main' panicked at 'Failed to load texture: IoError(O...
New
mcpierce
@mfazio23 I’ve applied the changes from Chapter 5 of the book and everything builds correctly and runs. But, when I try to start a game,...
New
SlowburnAZ
Getting an error when installing the dependencies at the start of this chapter: could not compile dependency :exla, "mix compile" failed...
New

Other popular topics Top

New
ohm
Which, if any, games do you play? On what platform? I just bought (and completed) Minecraft Dungeons for my Nintendo Switch. Other than ...
New
PragmaticBookshelf
Design and develop sophisticated 2D games that are as much fun to make as they are to play. From particle effects and pathfinding to soci...
New
Rainer
My first contact with Erlang was about 2 years ago when I used RabbitMQ, which is written in Erlang, for my job. This made me curious and...
New
AstonJ
There’s a whole world of custom keycaps out there that I didn’t know existed! Check out all of our Keycaps threads here: https://forum....
New
AstonJ
We’ve talked about his book briefly here but it is quickly becoming obsolete - so he’s decided to create a series of 7 podcasts, the firs...
New
AstonJ
Was just curious to see if any were around, found this one: I got 51/100: Not sure if it was meant to buy I am sure at times the b...
New
PragmaticBookshelf
Programming Ruby is the most complete book on Ruby, covering both the language itself and the standard library as well as commonly used t...
New
First poster: bot
zig/http.zig at 7cf2cbb33ef34c1d211135f56d30fe23b6cacd42 · ziglang/zig. General-purpose programming language and toolchain for maintaini...
New
NewsBot
Node.js v22.14.0 has been released. Link: Release 2025-02-11, Version 22.14.0 'Jod' (LTS), @aduh95 · nodejs/node · GitHub
New

Sub Categories: