需要一些关于AmazonDynamoDB(NoSQL)的帮助,但我认为它与AmazonDynamoDB无关的一般错误。
下面是一个使用DB,talbe name = table并且有2列PhraseID(整数,键列)和短语(字符串)的类。
@DynamoDBTable(tableName = "table")
public class Phrase {
private Integer PhraseID;
private String phrase;
@DynamoDBHashKey(attributeName = "phraseID")
public Integer getID()
{ return PhraseID; }
public void setID(Integer PhraseID) {
this.PhraseID = PhraseID;}
@DynamoDBAttribute(attributeName = "phrase")
public String getPhrase()
{ return phrase; }
public void setPhrase(String phrase)
{ this.phrase = phrase; }
}
使用mapper.save(短语)通过phrase.setID等编写/更新此表没有问题,但是没有读取/加载。我称之为readDB:new readDB()。execute("");
private class readDB extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params)
{
AmazonDynamoDBClient ddbClient = new AmazonDynamoDBClient(credentialsProvider); //sdk-ddb
DynamoDBMapper mapper = new DynamoDBMapper(ddbClient);
Phrase phrase = new Phrase();
int a=1;
mapper.load(Phrase.class, a); //want to load a phrase from db with phraseID=1
return "Executed";
}
}
所以我得到错误:&#34; com.amazonaws.services.dynamodb.datamodeling.DynamoDBMappingException:无法实例化新的类实例&#34;还有一个&#34;主要活动短语没有零参数构造函数&#34;
谷歌搜索这个错误给了我一个答案,我需要创建一个默认构造函数来解决这个异常&#34;但我真的不明白我需要做什么/改变我的代码。 谢谢!!
答案 0 :(得分:1)
看起来这个异常来自这里: https://github.com/Widen/aws-sdk-for-java/blob/master/src/main/java/com/amazonaws/services/dynamodb/datamodeling/DynamoDBMapper.java(第291行)
这意味着该类没有默认构造函数,您是否可以将非默认构造函数定义为短语?尝试添加
public Phrase(){}
希望它有所帮助。
答案 1 :(得分:1)
我遇到了同样的问题。 当尝试访问表以进行编组时,DynamoDBMapper会创建该类的新实例。 尝试为你的班级写一个构造函数。 为我工作
答案 2 :(得分:-1)
每个表类必须是操作每个表类的父类的子类。