Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"createdAt: AWSDateTime" in schema causes Datastore query failure #666

Closed
btdo opened this issue Jul 24, 2020 · 4 comments
Closed

"createdAt: AWSDateTime" in schema causes Datastore query failure #666

btdo opened this issue Jul 24, 2020 · 4 comments
Labels
bug Something isn't working datastore DataStore category/plugins

Comments

@btdo
Copy link

btdo commented Jul 24, 2020

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

@btdo
Copy link
Author

btdo commented Jul 24, 2020

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

@rjuliano
Copy link
Contributor

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.

@rjuliano rjuliano added bug Something isn't working datastore DataStore category/plugins labels Jul 24, 2020
@upachecog
Copy link

upachecog commented Sep 14, 2020

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) 

@jpignata jpignata added the pending-release Code has been merged but pending release label Sep 15, 2020
@richardmcclellan
Copy link
Contributor

richardmcclellan commented Sep 15, 2020

This should be resolved by #825, which has been released in 1.3.2. Please try out that version and let us know if it resolves this bug!

@richardmcclellan richardmcclellan removed the pending-release Code has been merged but pending release label Sep 15, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working datastore DataStore category/plugins
Projects
None yet
Development

No branches or pull requests

5 participants