Получить значения всех элементов в 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());
}
вы получите все названия