首页 > 解决方案 > get 方法擦除所有节点?

问题描述

我试图在我的 delphi 应用程序中使用FB4D 。

但是每当我尝试使用Get方法时,它都会删除所有节点并在数据库中写入时间戳。

这是我正在使用的代码:

// Clicking on btnLogin
procedure TForm3.BtnLoginClick(Sender: TObject);
begin
  if not Assigned(fConfig) then
    fConfig := TFirebaseConfiguration.Create(cApiKey, cId);
  fConfig.Auth.SignInWithEmailAndPassword(Edit1.Text, Edit2.Text,
    onUserResponse, onError);
end; 

//Log In Success
procedure TForm3.onUserResponse(const Info: string; user: IFirebaseUser);
begin
  UID := user.UID;
  pass := Edit2.Text;
  Email := user.Email;
  fConfig.RealTimeDB.GetServerVariables(cServerVariableTimeStamp, GetRTDBPath,
    onServerStamp, onError);
  Text1.Text := UID;
end; 

//Getting ServerTime for Usage
procedure TForm3.onServerStamp(const ServerVar: string; Val: TJSONValue);
var
  ST: int64;
begin
  ST := StrToInt64(Val.Value);
  sDate := TTimeZone.Local.ToLocalTime(UnixToDateTime(ST div 1000));
  SaveUser;
  UpdateLoginStatus;
end; 

//Trying to get data to use but is not getting at all 
procedure TForm3.UpdateLoginStatus;
begin
  fConfig.RealTimeDB.Get(GetRTDBPath, onGetResponse, onError);
end; 

//updating LoggedIn Status
procedure TForm3.onGetResponse(ResourceParams: TRequestResourceParam;
  Val: TJSONValue);
var
  sValue: TJSONObject;
begin
  ShowRTNode(ResourceParams, Val);

  //Below Will be used later once data is received 
  {sValue := TJSONObject.Create;
  try
    sValue.AddPair('LoggedIn', 'True');
    fConfig.RealTimeDB.Patch(GetRTDBPath, sValue, ShowRTNode, onError);
  finally
    sValue.Free;
  end;}
end; 

无法使用更新数据,因为当我尝试获取数据时,它会删除所有节点,然后在路径中创建时间戳。

为什么这样 ?

标签: firebasedelphifirebase-realtime-databasefiremonkey

解决方案


这是 RealTimeDB.GetServerVariables(cServerVariableTimeStamp, GetRTDBPath..) 的副作用。此函数不只返回时间戳。它还在 ResourceParams 寻址的节点中写入时间戳。请在此处阅读 wiki 中的说明: https ://github.com/SchneiderInfosystems/FB4D/wiki/FB4D-Reference-IRealTimeDB#get-a-server-variable

解决方案是在数据库中使用自定义timestamp节点,您就可以开始了。


推荐阅读