我已经检索了对象表单数据库,然后通过方法SELECT SUM(AHT) as TwoYears
FROM (
SELECT CASE
WHEN DATEDIFF(year, [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[HireDate], GETDATE()) >= 2
AND (DATEDIFF(year, [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[HireDate], GETDATE())) <= 2
OR (DATEDIFF(year, [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[HireDate], GETDATE())) <= 1
THEN [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[Value]
END AS AHT
FROM [AgentProfile_CRT].[dbo].[uvw_AHTMaster]
WHERE [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[Month] = 'January'
AND [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[Year] = 2018
AND [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[AccountID] = 8
AND [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[LOBID] = 23
) f
WHERE AHT = AHT
union all
SELECT COUNT(*) AS TwoYears
FROM (
SELECT CASE
WHEN DATEDIFF(year, [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[HireDate], GETDATE()) >= 2
AND (DATEDIFF(year, [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[HireDate], GETDATE())) <= 2
OR (DATEDIFF(year, [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[HireDate], GETDATE())) <= 1
THEN 'Good'
END AS Result
FROM [AgentProfile_CRT].[dbo].[uvw_AHTMaster]
WHERE [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[Month] = 'January'
AND [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[Year] = 2018
AND [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[AccountID] = 8
AND [AgentProfile_CRT].[dbo].[uvw_AHTMaster].[LOBID] = 23
) f
WHERE Result = 'Good'
更新了它,然后再次保存了
addreport()
答案 0 :(得分:0)
使用addListenerForSingleValueEvent()
代替addValueEventListener()
。您已在ref上实现了连续侦听器。这是正在发生的事情...
步骤1:将侦听器添加到ref并获取数据。该侦听器一直在侦听此引用的更改。
第2步:将数据转换为对象并执行操作(您的逻辑)
第3步:将数据保存到Firebase。现在,您已经更改了数据,您的onDataChanged将再次被调用。
步骤4:但是这次您的对象已经更新,因此添加q.addreport(s);
不会改变对象。
第5步:您尝试将数据保存在Firebase中,但是没有要保存的更改,因此它将终止。
希望有帮助!
答案 1 :(得分:0)
FirebaseDatabase.getInstance().getReference("Users")
.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Empinfo q = dataSnapshot.getValue(Empinfo.class);
q.addreport(s);
dataSnapshot.getRef().setValue(q);
progressBar.setVisibility(View.GONE);
Toast.makeText(getApplicationContext(), profileImageUrl, Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
我使用addListenerForSingleValueEvent
来获取数据,但不进行实时更新,而使用addValueEventListener
来进行每次数据更改的实时更新。
您的问题可能是由于在dataSnapshot.getRef().setValue(q);
调用的onDataChange
方法内使用了指令addValueEventListener
导致的,因此该部分存在递归。