获取 DynamoDB 中所有项目的值 table 并显示 (Android)

Get values of all items in DynamoDB table and display (Android)

我在使用 DynamoDB 时遇到问题。我不知道如何获取 DynamoDB 的 table(在本例中为 DynamoDBTable)中的所有项目并显示它。我尝试使用 Scan,但它给了我空异常错误。

扫描表

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.access0(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)

我做错了什么吗?

AmazonDynamoDB 数据库是在 this line of the most recent version of Android SDK. Your NPE is happening on the call to the scan method of db field. It appears that the AmazonDynamoDB field may be null and is not set. Did you create a DynamoDB client and inject it in the Mapper 上声明的?换句话说,上面的client变量是否设置?最后,您的调用实例 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());
    }

您将获得所有称号