Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 房间:如何获取成员的实际余额,并将其用于setter方法来设置特定成员的余额_Android_Android Room - Fatal编程技术网

Android 房间:如何获取成员的实际余额,并将其用于setter方法来设置特定成员的余额

Android 房间:如何获取成员的实际余额,并将其用于setter方法来设置特定成员的余额,android,android-room,Android,Android Room,我使用Android Room作为我的数据库。我有一个标题屏幕,当我点击那里的按钮时,我的活动就会打开。该活动向我显示保存在数据库中的成员列表。我的实体成员包括名字、姓氏和余额。我可以添加新成员。用户可以设置名字和姓氏,余额自动设置为0。我有另一个名为transactions的实体,我可以在其中添加事务并将事务与成员链接 如果我为成员a添加两个新交易,则成员a的余额将增加。我可以在我的会员活动中单击某个会员,然后我会看到该会员的其他信息。在这里,我可以看到他在我的DAO中使用SUM()查询的实际

我使用Android Room作为我的数据库。我有一个标题屏幕,当我点击那里的按钮时,我的活动就会打开。该活动向我显示保存在数据库中的成员列表。我的实体成员包括名字、姓氏和余额。我可以添加新成员。用户可以设置名字和姓氏,余额自动设置为0。我有另一个名为transactions的实体,我可以在其中添加事务并将事务与成员链接

如果我为成员a添加两个新交易,则成员a的余额将增加。我可以在我的会员活动中单击某个会员,然后我会看到该会员的其他信息。在这里,我可以看到他在我的DAO中使用SUM()查询的实际余额

但我不知道,如何使用该查询来设置成员的余额。我也不知道应该在哪里(在哪个类中)使用成员类的set Balance方法

有人能帮我吗?如果您需要任何特定的代码,只需写下注释,我会将其添加到这个问题中。谢谢

实体成员:

@TypeConverters(Converters.class)
@Entity(tableName = "member_table")
public class Member {

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "MemberID")
    private long id;

    @ColumnInfo(name = "FirstName")
    private String firstname;

    @ColumnInfo(name = "Surname")
    private String surname;

    @ColumnInfo(name = "MemberBalance")
    private BigDecimal balance;

    private boolean isSelected = false;

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

    public BigDecimal getBalance() {
        return balance;
    }

    public void setBalance(BigDecimal balance) {
        this.balance = balance;
    }


    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public Member(String firstname, String surname) {
        this.firstname = firstname;
        this.surname = surname;
        this.balance = new BigDecimal(0).setScale(2, RoundingMode.HALF_EVEN);
    }

    public void setSelected(boolean selected) {
        isSelected = selected;
    }

    public boolean isSelected() {
        return isSelected;
    }

}
实体交易:

@TypeConverters(Converters.class)
@Entity(tableName = "transaction_table")
public class Transaction {

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "TransactionID")
    private long id;

    @ColumnInfo(name = "TransactionName")
    private String transactionName;

    @ColumnInfo(name = "TransactionBalance")
    private BigDecimal balance;

    public BigDecimal getBalance() {
        return balance;
    }

    public void setBalance(BigDecimal balance) {
        this.balance = balance;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getTransactionName() {
        return transactionName;
    }

    public void setTransactionName(String transactionName) {
        this.transactionName = transactionName;
    }

    public Transaction(String transactionName, BigDecimal balance) {
        this.transactionName = transactionName;
        this.balance = new BigDecimal(String.valueOf(balance)).setScale(2, RoundingMode.HALF_EVEN);
    }
}

第一张图片:这是我的会员活动,我看到了所有会员的名单。余额始终为0.00,因为我从未使用setBalance()方法,并且余额应该是通过getBalance()方法获得的值

第二张图片:这是我的交易活动,我可以看到所有交易的列表

第三张图片:当我点击一个成员时,此活动开始。然后我看到了会员的名字,下面是他参与的所有交易。这里的成员余额是通过DAO查询获取的:从事务表上的成员表内部联接事务表中选择SUM(TransactionBalance)。TransactionID=成员表事务表。TransactionID=其中成员表事务表。成员表ID=:memberid


我不知道如何以及在哪里让应用程序计算交易。应使用setBalance()方法设置计算返回的值

我建议不要在
成员
类中使用
余额
列,因为看起来所有数据都应该存储在此
事务
实体中。如果您必须显示特定
成员的余额
,您应该每次都计算他的余额。这种方法有一个主要缺点,从性能的角度来看,它是无效的。如果性能比拥有
余额
列更重要,这是一个好主意,但是每次向系统添加新的
事务
时,您都必须更新
成员
实体。

通过在添加事务时设置余额解决了我的问题。因此,我获取交易的价值,并将其添加到我的会员余额中。

您能否发布@Entity member的源代码。@Elletlar我更新了我的帖子。您的第二个选择是我想要实现的想法。每次设置新事务时,它都应计算新成员余额,并且应使用类成员中的setBalance方法设置新成员余额。你知道我怎么做吗?请提供
Transaction
class。好的,看起来你必须在
Transaction
class中添加'Member'id。然后您可以使用SQL请求,如
SELECT*FROM transaction\u表,其中member\u id类似于:memberId
。您将获得一个事务列表,并将它们相加,您将获得每个成员的余额。我已经使用MemberTransaction类将事务链接到成员。我使用此查询来获取余额:从成员\事务\表内部联接事务\表中选择SUM(TransactionBalance)在事务\表上。TransactionID=成员\事务\表。事务\ ID其中成员\事务\表。成员\ ID=:memberidBut我只能在单击特定成员时看到查询返回的值。但当我有所有成员的名单时,我看不到余额。我是否可以这样做,以便在member.setBalance()中设置查询的值?我想使用setBalance来设置这个值,这样我就可以用getBalance方法调用它。