Получить значения всех элементов в DynamoDB таблицы и отображения (Android)

У меня проблема с DynamoDB. Я понятия не имею, как получить все элементы в таблице (в данном случае DynamoDBTable) DynamoDB и отобразить ее. Я пытался использовать сканирование, но это дает мне ошибку нулевого исключения.

ScanTable

public void ScanTable() throws Exception {

        DynamoDBMapper mapper = new DynamoDBMapper(client);

        System.out.println("Scanning Tesis");

        DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();

        List<DynamoDBTable> result = mapper.scan(DynamoDBTable.class, scanExpression);
        System.out.println(result.toString());

        for (DynamoDBTest tesis : result) {
           System.out.println(tesis.toString());
        }

DynamoDBTable

@DynamoDBTable(tableName = "Tesis")
public class DynamoDBTest {

        private String Title;
        private String id;
        private String Author;
        private String Year;
        private String Supervisor;
        private String Program;

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

        @DynamoDBAttribute(attributeName = "Title")
        public String getTitle()
        {
            return Title;
        }
        public void setTitle (String Title)
        {
            this.Title = Title;
        }

        @DynamoDBAttribute(attributeName = "Author")
        public String getAuthor ()
        {
            return Author;
        }
        public void setAuthor (String Author)
        {
            this.Author = Author;
        }

        @DynamoDBAttribute(attributeName = "Year")
        public String getYear ()
        {
            return Year;
        }
        public void setYear (String Year)
        {
            this.Year = Year;
        }

        @DynamoDBAttribute(attributeName = "Supervisor")
        public String getSupervisor ()
        {
            return Supervisor;
        }
        public void setSupervisor (String Supervisor)
        {
            this.Supervisor = Supervisor;
        }

        @DynamoDBAttribute(attributeName = "Program")
        public String getProgram ()
        {
            return Program;
        }
        public void setProgram (String Program)
        {
            this.Program = Program;
        }
}

6-28 21:35:47.816  10939-10939/com.example.user.test2 I/System.out﹕ Scanning Tesis
06-28 21:35:47.826  10939-10939/com.example.user.test2 W/System.err﹕ java.lang.NullPointerException
06-28 21:35:47.826  10939-10939/com.example.user.test2 W/System.err﹕ at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.scan(DynamoDBMapper.java:2007)
06-28 21:35:47.826  10939-10939/com.example.user.test2 W/System.err﹕ at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.scan(DynamoDBMapper.java:1971)
06-28 21:35:47.826  10939-10939/com.example.user.test2 W/System.err﹕ at com.example.user.test2.DynamoGetItem.ScanTable(DynamoGetItem.java:53)
06-28 21:35:47.826  10939-10939/com.example.user.test2 W/System.err﹕ at com.example.user.test2.DynamoGetItem.onCreate(DynamoGetItem.java:30)
06-28 21:35:47.826  10939-10939/com.example.user.test2 W/System.err﹕ at android.app.Activity.performCreate(Activity.java:5411)
06-28 21:35:47.826  10939-10939/com.example.user.test2 W/System.err﹕ at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
06-28 21:35:47.826  10939-10939/com.example.user.test2 W/System.err﹕ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
06-28 21:35:47.826  10939-10939/com.example.user.test2 W/System.err﹕ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396)
06-28 21:35:47.826  10939-10939/com.example.user.test2 W/System.err﹕ at android.app.ActivityThread.access$800(ActivityThread.java:139)
06-28 21:35:47.826  10939-10939/com.example.user.test2 W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)
06-28 21:35:47.826  10939-10939/com.example.user.test2 W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
06-28 21:35:47.826  10939-10939/com.example.user.test2 W/System.err﹕ at android.os.Looper.loop(Looper.java:149)
06-28 21:35:47.826  10939-10939/com.example.user.test2 W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5257)
06-28 21:35:47.826  10939-10939/com.example.user.test2 W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
06-28 21:35:47.826  10939-10939/com.example.user.test2 W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
06-28 21:35:47.826  10939-10939/com.example.user.test2 W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-28 21:35:47.826  10939-10939/com.example.user.test2 W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
06-28 21:35:47.826  10939-10939/com.example.user.test2 W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)

введите описание изображения здесь

Что-то я не так сделал?

2 ответа

Решение

AmazonDynamoDB db объявлен в этой строке самой последней версии Android SDK. Ваш NPE происходит при вызове метода сканирования поля db. Похоже, что поле AmazonDynamoDB может быть нулевым и не задано. Вы создали клиент DynamoDB и внедрили его в Mapper? Другими словами, установлена ​​ли клиентская переменная выше? Наконец, это похоже на начальный фрагмент вашего вызова List<DynamoDBTable> result = mapper.scan(DynamoDBTable.class, scanExpression); следует использовать DynamoDBTest.class вместо DynamoDBTable.class,

List<DynamoDBTable> result = mapper.scan(DynamoDBTable.class, scanExpression);
    System.out.println(result.toString());

    for (DynamoDBTest tesis : result) {
       System.out.println(tesis.getTitle.toString());
    }

вы получите все названия

Другие вопросы по тегам