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!!!

Popular Pragmatic Bookshelf topics Top

ianwillie
Hello Brian, I have some problems with running the code in your book. I like the style of the book very much and I have learnt a lot as...
New
yulkin
your book suggests to use Image.toByteData() to convert image to bytes, however I get the following error: "the getter ‘toByteData’ isn’t...
New
sdmoralesma
Title: Web Development with Clojure, Third Edition - migrations/create not working: p159 When I execute the command: user=&gt; (create-...
New
simonpeter
When I try the command to create a pair of migration files I get an error. user=&gt; (create-migration "guestbook") Execution error (Ill...
New
raul
Page 28: It implements io.ReaderAt on the store type. Sorry if it’s a dumb question but was the io.ReaderAt supposed to be io.ReadAt? ...
New
joepstender
The generated iex result below should list products instead of product for the metadata. (page 67) iex&gt; product = %Product{} %Pento....
New
leba0495
Hello! Thanks for the great book. I was attempting the Trie (chap 17) exercises and for number 4 the solution provided for the autocorre...
New
curtosis
Running mix deps.get in the sensor_hub directory fails with the following error: ** (Mix) No SSH public keys found in ~/.ssh. An ssh aut...
New
jskubick
I’m running Android Studio “Arctic Fox” 2020.3.1 Patch 2, and I’m embarrassed to admit that I only made it to page 8 before running into ...
New
Keton
When running the program in chapter 8, “Implementing Combat”, the printout Health before attack was never printed so I assumed something ...
New

Other popular topics Top

PragmaticBookshelf
A PragProg Hero’s Journey with Brian P. Hogan @bphogan Have you ever worried that your only legacy will be in the form of legacy...
New
Exadra37
I am thinking in building or buy a desktop computer for programing, both professionally and on my free time, and my choice of OS is Linux...
New
AstonJ
I’ve been hearing quite a lot of comments relating to the sound of a keyboard, with one of the most desirable of these called ‘thock’, he...
New
New
PragmaticBookshelf
“A Mystical Experience” Hero’s Journey with Paolo Perrotta @nusco Ever wonder how authoring books compares to writing articles?...
New
PragmaticBookshelf
Build highly interactive applications without ever leaving Elixir, the way the experts do. Let LiveView take care of performance, scalabi...
New
New
PragmaticBookshelf
Author Spotlight Mike Riley @mriley This month, we turn the spotlight on Mike Riley, author of Portable Python Projects. Mike’s book ...
New
PragmaticBookshelf
Author Spotlight: Bruce Tate @redrapids Programming languages always emerge out of need, and if that’s not always true, they’re defin...
New
sir.laksmana_wenk
I’m able to do the “artistic” part of game-development; character designing/modeling, music, environment modeling, etc. However, I don’t...
New