Hello,
I'm using Amplify DataStore to talk to an AppSync API in the cloud. When I include createdAt: AWSDateTime in my schema, all of my queries will fail.
Here's my schema:
type TrackItem @model
@key(name: "byOwnerIdAndPin" fields: ["owner", "pin"] queryField: "itemsByOwnerIdAndPin")
@auth( rules: [ { allow: owner, ownerField: "owner", provider: oidc, identityClaim: "sub" },
{ allow: public, operations: [read, create, delete, update] } ])
{
id: ID!
pin: String!
description: String
type: String
owner: String
createdAt: AWSDateTime
}
This is my query call:
fun query() {
Amplify.DataStore.query(TrackItem::class.java,
{
val list = mutableListOf<TrackItemModel>()
while (it.hasNext()) {
val item = it.next()
Log.i("MyAmplifyApp", "Owner: ${item.owner}")
list.add(TrackItemModel(item.id, item.owner, item.pin, item.description))
}
_list.postValue(list)
},
{ Log.e("MyAmplifyApp", "Query failed.", it) }
)
}
Here's the exception that I get whenever I do query call:
2020-07-24 09:11:06.689 24938-25040/com.wwm.trackappsyncapp I/MyAmplifyApp: Observing: TrackItem {id=f0da3550-d226-4116-852f-a0f69d6a9470, pin=123231232, description=, type=null, owner=null, createdAt=Temporal.DateTime{offsetDateTime='2020-07-23T16:43:40.464Z'}}
2020-07-24 09:11:06.697 24938-25049/com.wwm.trackappsyncapp I/MyAmplifyApp: Observing: TrackItem {id=68041573-6666-496f-a3db-80a0ba81b651, pin=234343, description=test, type=null, owner=sbstg2napp, createdAt=Temporal.DateTime{offsetDateTime='2020-07-23T19:00:52.406Z'}}
2020-07-24 09:11:06.705 24938-25048/com.wwm.trackappsyncapp E/MyAmplifyApp: Query failed.
AmplifyException {message=Error in querying the model., cause=java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.time.LocalDateTime.toString()' on a null object reference, recoverySuggestion=See attached exception for details.}
at com.amplifyframework.datastore.storage.sqlite.SQLiteStorageAdapter.lambda$query$4$SQLiteStorageAdapter(SQLiteStorageAdapter.java:413)
at com.amplifyframework.datastore.storage.sqlite.-$$Lambda$SQLiteStorageAdapter$rGner20-W7t2tJu4yCrrZwlquWE.run(Unknown Source:10)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.time.LocalDateTime.toString()' on a null object reference
at java.time.OffsetDateTime.toString(OffsetDateTime.java:1906)
at java.lang.String.valueOf(String.java:2924)
at java.lang.StringBuilder.append(StringBuilder.java:132)
at com.amplifyframework.core.model.temporal.Temporal$DateTime.toString(Temporal.java:260)
at java.lang.String.valueOf(String.java:2924)
at java.lang.StringBuilder.append(StringBuilder.java:132)
at com.amplifyframework.datastore.generated.model.TrackItem.hashCode(TrackItem.java:94)
Line 94 is the getCreatedAt() call in this function of TrackItem:
@Override
public int hashCode() {
return new StringBuilder()
.append(getId())
.append(getPin())
.append(getDescription())
.append(getType())
.append(getOwner())
.append(getCreatedAt())
.toString()
.hashCode();
}
Here are my dependencies:
implementation 'com.amplifyframework:core:1.1.1'
implementation 'com.amplifyframework:aws-api:1.1.1' // If using cloud sync
implementation 'com.amplifyframework:aws-datastore:1.1.1'
Thanks
Hi @jamesonwilliams , @rjuliano, this is the "createdAt: AWSDateTime" issue that we discussed in the Android-help forum. I'm just creating this issue to keep track of it. Please let me know if I'm doing something wrong or if this is a true bug
Again, thanks so much for doing that. It's easy to lose track of discussions on Discord sometimes. I think this is the correct way to move forward to troubleshoot this issue. Thank you for your patience.
I'm facing the same issue with Amplify API & Datastore version: 1.3.1.
E/MyAmplifyApp: Observation failed.
AmplifyException {message=Error in saving the model: Actividad[id=93d35142-ab8b-46c1-91ba-a353c908dedb], cause=java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.time.LocalDateTime.toString()' on a null object reference, recoverySuggestion=See attached exception for details.}
at com.amplifyframework.datastore.storage.sqlite.SQLiteStorageAdapter.lambda$save$3$SQLiteStorageAdapter(SQLiteStorageAdapter.java:333)
at com.amplifyframework.datastore.storage.sqlite.-$$Lambda$SQLiteStorageAdapter$JhGtXoPGeJ7lbNvRHxROfLs-WmE.run(Unknown Source:12)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.time.LocalDateTime.toString()' on a null object reference
at java.time.OffsetDateTime.toString(OffsetDateTime.java:1906)
at java.lang.String.valueOf(String.java:2924)
at java.lang.StringBuilder.append(StringBuilder.java:132)
at com.amplifyframework.core.model.temporal.Temporal$DateTime.toString(Temporal.java:267)
at java.lang.String.valueOf(String.java:2924)
at com.amplifyframework.datastore.generated.model.Actividad.toString(Actividad.java:156)
at com.amplifyframework.datastore.storage.sqlite.SQLiteStorageAdapter.saveModel(SQLiteStorageAdapter.java:693)
at com.amplifyframework.datastore.storage.sqlite.SQLiteStorageAdapter.lambda$save$3$SQLiteStorageAdapter(SQLiteStorageAdapter.java:315)
at com.amplifyframework.datastore.storage.sqlite.-$$Lambda$SQLiteStorageAdapter$JhGtXoPGeJ7lbNvRHxROfLs-WmE.run(Unknown Source:12)聽
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)聽
at java.util.concurrent.FutureTask.run(FutureTask.java:266)聽
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)聽
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)聽
at java.lang.Thread.run(Thread.java:923)聽
E/ActivityRepository: Update failed.
AmplifyException {message=Error in saving the model: Actividad[id=93d35142-ab8b-46c1-91ba-a353c908dedb], cause=java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.time.LocalDateTime.toString()' on a null object reference, recoverySuggestion=See attached exception for details.}
at com.amplifyframework.datastore.storage.sqlite.SQLiteStorageAdapter.lambda$save$3$SQLiteStorageAdapter(SQLiteStorageAdapter.java:333)
at com.amplifyframework.datastore.storage.sqlite.-$$Lambda$SQLiteStorageAdapter$JhGtXoPGeJ7lbNvRHxROfLs-WmE.run(Unknown Source:12)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.time.LocalDateTime.toString()' on a null object reference
at java.time.OffsetDateTime.toString(OffsetDateTime.java:1906)
at java.lang.String.valueOf(String.java:2924)
at java.lang.StringBuilder.append(StringBuilder.java:132)
at com.amplifyframework.core.model.temporal.Temporal$DateTime.toString(Temporal.java:267)
at java.lang.String.valueOf(String.java:2924)
at com.amplifyframework.datastore.generated.model.Actividad.toString(Actividad.java:156)
at com.amplifyframework.datastore.storage.sqlite.SQLiteStorageAdapter.saveModel(SQLiteStorageAdapter.java:693)
at com.amplifyframework.datastore.storage.sqlite.SQLiteStorageAdapter.lambda$save$3$SQLiteStorageAdapter(SQLiteStorageAdapter.java:315)
at com.amplifyframework.datastore.storage.sqlite.-$$Lambda$SQLiteStorageAdapter$JhGtXoPGeJ7lbNvRHxROfLs-WmE.run(Unknown Source:12)聽
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)聽
at java.util.concurrent.FutureTask.run(FutureTask.java:266)聽
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)聽
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)聽
at java.lang.Thread.run(Thread.java:923)聽
This should be resolved by https://github.com/aws-amplify/amplify-android/pull/825, which has been released in 1.3.2. Please try out that version and let us know if it resolves this bug!
Most helpful comment
Hi @jamesonwilliams , @rjuliano, this is the "createdAt: AWSDateTime" issue that we discussed in the Android-help forum. I'm just creating this issue to keep track of it. Please let me know if I'm doing something wrong or if this is a true bug