2017-04-14 50 views
0

在我的DynamoDB数据库中的表上运行扫描表达式时,Im发生特定错误。截至目前,我的项目表中有一个项目。此项目包含项目说明和团队队友的列表。当检索项目描述的信息时,我的代码打印出项目的正确名称。然而,当试图从这个相同的项目检索队友列表时,它说该列表是一个空对象引用。我似乎无法理解为什么返回的列表为空。假设所有权限已在IAM控制台和数据库中正确设置。如何从DynamoDB检索列表?

下面是我的线程扫描表的代码。

public void run() { 
       DynamoDBScanExpression scanExpression = new DynamoDBScanExpression(); 
    //returns a list of items from the table. each item is of Project type 
       List<Project> scanResult=mapper.scan(Project.class,scanExpression); 
//for each project within scanResult do the following 
       for (Project project: scanResult){ 
//retrieve the name of the team (this portion of the code logs the project name properly) 
        String team=project.getProjectname(); 
        Log.v("team",team.toString()); 
//The list being returned from this one line below is null?? 
        List<String> teammates=project.getTeammates(); 

        Log.v("Teammate", teammates.get(0)); 
       } 

      } 

     }; 

     Thread mythread = new Thread(runnable); 
     mythread.start(); 

以下是在扫描表格时充当模板的Projects类的代码。这很可能是问题的方面,因为项目描述字符串被正确返回,但是teamMates List isnt。也许我不应该使用List,或者List没有被正确定义,或者Java注释在这张桌子上的使用不正确!但是我无法找到问题

package com.example.varun.finalproject; 
import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.*; 

import java.util.List; 

/** 
* Created by Varun on 4/10/17. 
*/ 
@DynamoDBTable(tableName = "SBUProjects") 

public class Project { 
private String ProjectName; 
private List<String> TeamMates; 
    @DynamoDBHashKey(attributeName = "ProjectName") 
    public String getProjectname() { 
     return ProjectName; 
    } 

    public void setProjectname(String projectName) { 
     this.ProjectName = projectName; 
    } 

    public List<String> getTeammates() { 
     return TeamMates; 
    } 

    public void setTeammates(List teammates) { 
     this.TeamMates= TeamMates; 
    } 

    } 

最后,这里是我的表的照片,包含了项目介绍和我的队友列表字符串的String项目。我假设,因为表确定teamMates是一个列表,我也应该在返回teamMates的时候创建一个List。

http://i67.tinypic.com/2qnm58h.jpg
帮助将不胜感激。

回答

0

您需要在getTeammates()方法上设置注释,类似于您为getProjectname()方法设置它的方式。

例如, @DynamoDBAttribute(attributeName = "teammates")