Android Room,只能从查询中获得1个结果,但已选中,并且应该有更多结果

时间:2018-11-14 19:14:52

标签: android android-room

我检查了数据库,同一组应该有4个结果。我检查了插入操作,一切正常。

@Dao
public interface MemberDao {
  @Query("Select * from `Member` where id=:groupsId")
  List<Member> getMembers(int groupsId);
}

这是我检索数据的方法,

public List<Member> getMembers(final Group group){
    LoadData d = new LoadData();
    d.onComplete = this;
    d.execute(group);

    return null;
}

@Override
public void onOutput(List<Member> result) {
    member = result;
    for(Member m : member){
        System.out.println(m.name);
    }
}

public class LoadData extends AsyncTask<Group, Void, List<Member>> {
    private OnTaskComplete onComplete =null;

    @Override
    protected List<Member> doInBackground(Group... groups) {
        List<Member> result = memberDao.getMembers(groups[0].id);
        return result;
    }

    @Override
    protected void onPostExecute(List<Member> result){
        onComplete.onOutput(result);

    }
}

但是结果中只有1个,并且列表中应该有4个成员。

所以我的问题是:

  1. 如果我可以得到1个结果,则groupsId没问题。 那么为什么它只返回1个结果?

  2. 我尝试只返回成员的整个列表,而不管groupsId为何,我可以得到恰好4个。因此,仅当我尝试指定组ID时才会发生。

有人知道为什么会这样吗?

P.S。这是会员类。

@Entity(foreignKeys = @ForeignKey(parentColumns  =
    "id", childColumns = "groupsId", entity = Group.class))
public class Member {
    @PrimaryKey(autoGenerate = true)
    public int id;
    public String name;
    public long groupsId;

public Member(String name) {
    this.name = name;
}

public void setGroupsId(long groupsId){
    this.groupsId = groupsId;
}

public String getName(){
    return name;
}

enter image description here 我将其张贴在此处以显示经过验证的数据。

1 个答案:

答案 0 :(得分:0)

添加房间注释:

public class Member {

    @ColumnInfo(name = "user_id")
    @PrimaryKey(autoGenerate = true)
    private Long userId;

    @ColumnInfo(name = "group_id")
    private Long groupId;

    @ColumnInfo(name = "username")
    public String name;

    ...
}