Не удалось создать новый экземпляр класса, не имеет конструктора с нулевым аргументом, DynamodB Query / Scan - PullRequest
0 голосов
/ 11 декабря 2018

Я получаю сообщение об ошибке в своем классе UserPicture в строке:

List<Picture> scanResult = mapper.scan(Picture.class, scanExpression);

Ошибка:

java.lang.InstantiationException: java.lang.Class com.Стили

И мой класс Picture, и класс UserPicture находятся внутри следующего класса.Почему я получаю эти ошибки?Некоторые из вещей, которые я сделал, чтобы исправить проблему, - это изменить класс UserPicture на static и реализовать конструктор по умолчанию без аргументов.

Асинхронный класс

public class UserPicture extends AsyncTask<String, Void, List<Map<String,String>>> {

    String tag = "USERPICTURE controller ";
    @Override
    protected List<Map<String,String>> doInBackground(String... params) {

        Log.d(tag, "Fetching pictures");

        Context context = AndroidApplication.getAppContext();

        CognitoCachingCredentialsProvider credentials = new CognitoCachingCredentialsProvider(
                context, Constants.ACCOUNT_ID, Constants.IDENTITY_POOL_ID,
                Constants.UNAUTH_ROLE_ARN, null, Regions.US_EAST_2);
        AmazonDynamoDBClient ddb = new AmazonDynamoDBClient(credentials);
        ddb.setRegion(Region.getRegion(Regions.US_EAST_2));
        DynamoDBMapper mapper = DynamoDBMapper.builder().dynamoDBClient(ddb).build();

        Log.d(tag,"params sub obtained - " + params[0]);

        Condition condition = new Condition().withComparisonOperator(
                ComparisonOperator.EQ.toString()).withAttributeValueList(
                new AttributeValue().withS(params[0]));
        DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();
        scanExpression.addFilterCondition("sub", condition);

        Picture pic = new Picture();

        List<Picture> scanResult = mapper.scan(Picture.class, scanExpression);
        List<Map<String,String>> picList = new LinkedList<Map<String,String>>();
        //Log.d(tag, "scanResult = " +scanResult);
        String name;
        for (Picture picture: scanResult) {
            Map<String, String> tmp = new HashMap<String, String>();
            tmp.put("id", picture.getId());
            name = picture.getId() + picture.getExtension();
            tmp.put("name", name);
            tmp.put("date", picture.getDateCreated());

            // Add to the list
            picList.add(tmp);
        }
        Log.d(tag,"pickList.get(0).get(name)" + picList.get(0).get("name"));

        return picList;
    }
    @Override
    protected void onPostExecute(List result) { }
    @Override
    protected void onPreExecute() {}
    @Override
    protected void onProgressUpdate(Void... values) {}
}

Класс рисунка

@DynamoDBTable(tableName = Constants.PICTURE_TABLE)
public class Picture {

    //public Picture(){}

    final String TAG = "PictureTable";
    private String id;
    private String sub;
    Date d;
    DateFormat f;
    private String date_created;
    private final String dateTimeStringFormat = "MM/dd/yyyy HH:mm:ss";
    private String extension;

    // Default constructor
    //public Picture(){}

    // Id primary key
    @DynamoDBHashKey(attributeName = "id")
    @DynamoDBAutoGeneratedKey
    public String getId() { return id; }
    public void setId(String id) { this.id = id; }

    @DynamoDBAttribute(attributeName = "sub")
    public String getSub() { return this.sub; }
    public void setSub(String sub) { this.sub = sub; }


    @DynamoDBAttribute(attributeName = "date_created")
    public String getDateCreated() { return this.date_created; }
    public void setDateCreated() {
        DateFormat f = new SimpleDateFormat(dateTimeStringFormat);
        this.d = Calendar.getInstance().getTime();
        this.date_created = f.format(this.d);
    }

    @DynamoDBAttribute(attributeName = "extension")
    public String getExtension(){return this.extension;}
    public void setExtension(String extension){this.extension = extension;}

}
...