java - DynamoDB AmazonServiceException: The provided key element does not match the schema -
so can guide me why i'm getting exception. here list of exceptions bcz of app has stopped:- 11-11 17:54:22.724 5048-5171/com.creation.ceaggregation1 e/androidruntime: fatal exception: asynctask #3 process: com.creation.ceaggregation1, pid: 5048 java.lang.runtimeexception: error occured while executing doinbackground() @ android.os.asynctask$3.done(asynctask.java:304) @ java.util.concurrent.futuretask.finishcompletion(futuretask.java:355) @ java.util.concurrent.futuretask.setexception(futuretask.java:222) @ java.util.concurrent.futuretask.run(futuretask.java:242) @ android.os.asynctask$serialexecutor$1.run(asynctask.java:231) @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1112) @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:587) @ java.lang.thread.run(thread.java:818) caused by: com.amazonaws.amazonserviceexception: provided key element not match schema (service: amazondynamodb; status code: 400; error code: validationexception; request id: c8btd5j7q2477psok1f9g3futfvv4kqnso5aemvjf66q9asuaajg) @ com.amazonaws.http.amazonhttpclient.handleerrorresponse(amazonhttpclient.java:712) @ com.amazonaws.http.amazonhttpclient.executehelper(amazonhttpclient.java:388) @ com.amazonaws.http.amazonhttpclient.execute(amazonhttpclient.java:199) @ com.amazonaws.services.dynamodbv2.amazondynamodbclient.invoke(amazondynamodbclient.java:4181) @ com.amazonaws.services.dynamodbv2.amazondynamodbclient.updateitem(amazondynamodbclient.java:1582) @ com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.dynamodbmapper$saveobjecthandler.doupdateitem(dynamodbmapper.java:1173) @ com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.dynamodbmapper$2.executelowlevelrequest(dynamodbmapper.java:873) @ com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.dynamodbmapper$saveobjecthandler.execute(dynamodbmapper.java:1056) @ com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.dynamodbmapper.save(dynamodbmapper.java:904) @ com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.dynamodbmapper.save(dynamodbmapper.java:688) @ com.creation.ceaggregation1.enteruser$updatetable.doinbackground(enteruser.java:64) @ com.creation.ceaggregation1.enteruser$updatetable.doinbackground(enteruser.java:40) @ android.os.asynctask$2.call(asynctask.java:292) @ java.util.concurrent.futuretask.run(futuretask.java:237) @ android.os.asynctask$serialexecutor$1.run(asynctask.java:231) @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1112) @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:587) @ java.lang.thread.run(thread.java:818) 11-11 17:54:24.769 5048-5171/com.creation.ceaggregation1 i/process: sending signal. pid: 5048 sig: 9
heres mapper class:-
@dynamodbtable(tablename = "agation1") public class awsdynamdbmapperclass { string username; string password; @dynamodbhashkey(attributename="username")//username public string getusername() { return username; } public void setusername(string username) { this.username = username; } @dynamodbattribute(attributename = "password")//password public string getpassword() { return password; } public void setpassword(string password) { this.password = password; } }
here mainactivity code:- private class updatetable extends asynctask {
@override protected string doinbackground(string... params) { string name = params[0]; string password = params[1]; try { awsdynamodbmanagerclass manager = new awsdynamodbmanagerclass(); cognitocredentialsprovider credentialsprovider = manager.getcredentials(enteruser.this); awsdynamdbmapperclass mapperclass = new awsdynamdbmapperclass(); mapperclass.setusername(name); mapperclass.setpassword(password); if (credentialsprovider != null && mapperclass != null) { dynamodbmapper dynamodbmapper = manager.initdynamoclient((cognitocachingcredentialsprovider) credentialsprovider); dynamodbmapper.save(mapperclass);//gives error on here } else { return "ss"; } return "rr"; } catch (dynamodbmappingexception ex) { ex.printstacktrace(); return "exception"; } } @override protected void onpostexecute(string result) { super.onpostexecute(result); if(result.equals("ss")){ toast.maketext(enteruser.this, "entered :) ", toast.length_long).show(); }else if(result.equals("rr")){ toast.maketext(enteruser.this, "already existing", toast.length_short).show(); }else{ toast.maketext(enteruser.this, "**exception caught**", toast.length_short).show(); } } }
2 difference between partition key, primary key hash key , sort key??
3 please suggest if asynctask required here or not. please suggest benefits , disadvantages (through example,if possible better)
thank helping.
1) because table "agation1" not have partition key set "username" or not string
2) partition key combination of primary key hash + sort key. 2 uniquely identify row. table not have have sort key. if has no sort key, partition key same hash key.
3) must make save calls on different thread, asynctask 1 way that.
great
ReplyDelete