question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Serializing a large list in Android doesn't work

See original GitHub issue

Describe the bug Serializing a list of large list, say 1000 elements in Android doesn’t work. The result gets cut off and it never finishes.

To Reproduce Create an empty activity project using Android Studio

Add this data class

@Serializable
data class Item(
    val title: String,
    val position: Int,
)

Run the following code

val list = List(1000) { Item(title = "Title $it", position = it) }
val output = Json.encodeToString(list)
println(output)

Output

 [{"title":"Title 0","position":0},{"title":"Title 1","position":1},{"title":"Title 2","position":2},{"title":"Title 3","position":3},{"title":"Title 4","position":4},{"title":"Title 5","position":5},{"title":"Title 6","position":6},{"title":"Title 7","position":7},{"title":"Title 8","position":8},{"title":"Title 9","position":9},{"title":"Title 10","position":10},{"title":"Title 11","position":11},{"title":"Title 12","position":12},{"title":"Title 13","position":13},{"title":"Title 14","position":14},{"title":"Title 15","position":15},{"title":"Title 16","position":16},{"title":"Title 17","position":17},{"title":"Title 18","position":18},{"title":"Title 19","position":19},{"title":"Title 20","position":20},{"title":"Title 21","position":21},{"title":"Title 22","position":22},{"title":"Title 23","position":23},{"title":"Title 24","position":24},{"title":"Title 25","position":25},{"title":"Title 26","position":26},{"title":"Title 27","position":27},{"title":"Title 28","position":28},{"title":"Title 29","position":29},{"title":"Title 30","position":30},{"title":"Title 31","position":31},{"title":"Title 32","position":32},{"title":"Title 33","position":33},{"title":"Title 34","position":34},{"title":"Title 35","position":35},{"title":"Title 36","position":36},{"title":"Title 37","position":37},{"title":"Title 38","position":38},{"title":"Title 39","position":39},{"title":"Title 40","position":40},{"title":"Title 41","position":41},{"title":"Title 42","position":42},{"title":"Title 43","position":43},{"title":"Title 44","position":44},{"title":"Title 45","position":45},{"title":"Title 46","position":46},{"title":"Title 47","position":47},{"title":"Title 48","position":48},{"title":"Title 49","position":49},{"title":"Title 50","position":50},{"title":"Title 51","position":51},{"title":"Title 52","position":52},{"title":"Title 53","position":53},{"title":"Title 54","position":54},{"title":"Title 55","position":55},{"title":"Title 56","position":56},{"title":"Title 57","position":57},{"title":"Title 58","position":58},{"title":"Title 59","position":59},{"title":"Title 60","position":60},{"title":"Title 61","position":61},{"title":"Title 62","position":62},{"title":"Title 63","position":63},{"title":"Title 64","position":64},{"title":"Title 65","position":65},{"title":"Title 66","position":66},{"title":"Title 67","position":67},{"title":"Title 68","position":68},{"title":"Title 69","position":69},{"title":"Title 70","position":70},{"title":"Title 71","position":71},{"title":"Title 72","position":72},{"title":"Title 73","position":73},{"title":"Title 74","position":74},{"title":"Title 75","position":75},{"title":"Title 76","position":76},{"title":"Title 77","position":77},{"title":"Title 78","position":78},{"title":"Title 79","position":79},{"title":"Title 80","position":80},{"title":"Title 81","position":81},{"title":"Title 82","position":82},{"title":"Title 83","position":83},{"title":"Title 84","position":84},{"title":"Title 85","position":85},{"title":"Title 86","position":86},{"title":"Title 87","position":87},{"title":"Title 88","position":88},{"title":"Title 89","position":89},{"title":"Title 90","position":90},{"title":"Title 91","position":91},{"title":"Title 92","position":92},{"title":"Title 93","position":93},{"title":"Title 94","position":94},{"title":"Title 95","position":95},{"title":"Title 96","position":96},{"title":"Title 97","position":97},{"title":"Title 98","position":98},{"title":"Title 99","position":99},{"title":"Title 100","position":100},{"title":"Title 101","position":101},{"title":"Title 102","position":102},{"title":"Title 103","position":103},{"title":"Title 104","position":104},{"title":"Title 105","position":105},{"title":"Title 106","position":106},{"title":"Title 107","position":107},{"title":"Title 108","position":108},{"title":"Title 109","position":109},{"title":"Title 110","position":110},{"title":"Title 111","position":111},{"title":"Title 112","position":112},{"title":"Title 113","position":113},{"title":"Title 114","position":114},{"title":"Title 115

Expected behavior The whole 1000 element list should be serialized.

Environment

  • Kotlin version: 1.5.31
  • Library version: 1.3.0
  • Kotlin platforms: JVM - Android
  • Gradle version: 7.0.2
  • IDE version : Android Studio 2021.3.1 Patch 3
  • OS version: Linux - PopOS 21.04
  • JDK version: 11

Issue Analytics

  • State:closed
  • Created 2 years ago
  • Comments:6 (3 by maintainers)

github_iconTop GitHub Comments

1reaction
JakeWhartoncommented, Oct 15, 2021
>>> len("""[{"title":"Title 0","position":0},{"title":"Title 1","position":1},{"title":"Title 2","position":2},{"title":"Title 3","position":3},{"title":"Title 4","position":4},{"title":"Title 5","position":5},{"title":"Title 6","position":6},{"title":"Title 7","position":7},{"title":"Title 8","position":8},{"title":"Title 9","position":9},{"title":"Title 10","position":10},{"title":"Title 11","position":11},{"title":"Title 12","position":12},{"title":"Title 13","position":13},{"title":"Title 14","position":14},{"title":"Title 15","position":15},{"title":"Title 16","position":16},{"title":"Title 17","position":17},{"title":"Title 18","position":18},{"title":"Title 19","position":19},{"title":"Title 20","position":20},{"title":"Title 21","position":21},{"title":"Title 22","position":22},{"title":"Title 23","position":23},{"title":"Title 24","position":24},{"title":"Title 25","position":25},{"title":"Title 26","position":26},{"title":"Title 27","position":27},{"title":"Title 28","position":28},{"title":"Title 29","position":29},{"title":"Title 30","position":30},{"title":"Title 31","position":31},{"title":"Title 32","position":32},{"title":"Title 33","position":33},{"title":"Title 34","position":34},{"title":"Title 35","position":35},{"title":"Title 36","position":36},{"title":"Title 37","position":37},{"title":"Title 38","position":38},{"title":"Title 39","position":39},{"title":"Title 40","position":40},{"title":"Title 41","position":41},{"title":"Title 42","position":42},{"title":"Title 43","position":43},{"title":"Title 44","position":44},{"title":"Title 45","position":45},{"title":"Title 46","position":46},{"title":"Title 47","position":47},{"title":"Title 48","position":48},{"title":"Title 49","position":49},{"title":"Title 50","position":50},{"title":"Title 51","position":51},{"title":"Title 52","position":52},{"title":"Title 53","position":53},{"title":"Title 54","position":54},{"title":"Title 55","position":55},{"title":"Title 56","position":56},{"title":"Title 57","position":57},{"title":"Title 58","position":58},{"title":"Title 59","position":59},{"title":"Title 60","position":60},{"title":"Title 61","position":61},{"title":"Title 62","position":62},{"title":"Title 63","position":63},{"title":"Title 64","position":64},{"title":"Title 65","position":65},{"title":"Title 66","position":66},{"title":"Title 67","position":67},{"title":"Title 68","position":68},{"title":"Title 69","position":69},{"title":"Title 70","position":70},{"title":"Title 71","position":71},{"title":"Title 72","position":72},{"title":"Title 73","position":73},{"title":"Title 74","position":74},{"title":"Title 75","position":75},{"title":"Title 76","position":76},{"title":"Title 77","position":77},{"title":"Title 78","position":78},{"title":"Title 79","position":79},{"title":"Title 80","position":80},{"title":"Title 81","position":81},{"title":"Title 82","position":82},{"title":"Title 83","position":83},{"title":"Title 84","position":84},{"title":"Title 85","position":85},{"title":"Title 86","position":86},{"title":"Title 87","position":87},{"title":"Title 88","position":88},{"title":"Title 89","position":89},{"title":"Title 90","position":90},{"title":"Title 91","position":91},{"title":"Title 92","position":92},{"title":"Title 93","position":93},{"title":"Title 94","position":94},{"title":"Title 95","position":95},{"title":"Title 96","position":96},{"title":"Title 97","position":97},{"title":"Title 98","position":98},{"title":"Title 99","position":99},{"title":"Title 100","position":100},{"title":"Title 101","position":101},{"title":"Title 102","position":102},{"title":"Title 103","position":103},{"title":"Title 104","position":104},{"title":"Title 105","position":105},{"title":"Title 106","position":106},{"title":"Title 107","position":107},{"title":"Title 108","position":108},{"title":"Title 109","position":109},{"title":"Title 110","position":110},{"title":"Title 111","position":111},{"title":"Title 112","position":112},{"title":"Title 113","position":113},{"title":"Title 114","position":114},{"title":"Title 115""")
4055

An Android log record is 4096 bytes. 41 bytes are used for the tag, level, etc. and what remains is used for the message.

Simply put: this library works fine. You’re merely logging too much in a single message. Try pretty-printing the output and logging once per-line. Or chunk it into 4000-char sections and use those. Or writing to a file. You’ll find all the data is there.

0reactions
alialbaalicommented, Oct 15, 2021

Yep, the problem doesn’t lie in this library. I’m closing this now.

Thanks for your help.

Read more comments on GitHub >

github_iconTop Results From Across the Web

Serializing a very large list - java - Stack Overflow
To handle data that is too big, you need to make it smaller :-) One idea is to get the data by chunks:...
Read more >
Script serialization - Unity - Manual
Serialization is the automatic process of transforming data structures or GameObject states into a format that Unity can store and reconstruct later.
Read more >
Saved State module for ViewModel - Android Developers
As mentioned in Saving UI States, ViewModel objects can handle configuration changes, so you don't need to worry about state in rotations or...
Read more >
Performance Tips - Json.NET
Here are some tips to make it go even faster. Reuse Contract Resolver; Optimize Memory Usage; JsonConverters; Manually Serialize; Benchmarks. Reuse Contract ...
Read more >
Protocol Buffer Basics: Java - Google Developers
Use Java Serialization. This is the default approach since it's built into the language, but it has a host of well-known problems (see...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found