-3

你能帮我用这个功能吗

function TdmPush.GetDeviceRegistrationId: string;
begin
{$IFDEF ANDROID}
result := gcmn.RegistrationID;
{$ELSE}
result := 'Mobile Test';
{$ENDIF}
 end;


 function TdmPush.PushMessage(Pushmessage : string):string;
  const
  sendUrl = 'https://android.googleapis.com/gcm/send';
  var
   Params: TStringList;
   AuthHeader: STring;
   idHTTP: TIDHTTP;
   SSLIOHandler: TIdSSLIOHandlerSocketOpenSSL;
   begin
   idHTTP := TIDHTTP.Create(nil);
   try
   SslIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
   idHTTP.IOHandler := SSLIOHandler;
   idHTTP.HTTPOptions := [];
   Params := TStringList.Create;
    try
     Params.Add('registration_id='+ GetDeviceRegistrationId());
     Params.Values['data.message'] := Pushmessage;
     idHTTP.Request.Host := sendUrl;
     AuthHeader := 'Authorization: key=' + YOUR_API_ID;
      idHTTP.Request.CustomHeaders.Add(AuthHeader);
      IdHTTP.Request.ContentType := 'application/x-www-form-   urlencoded;charset=UTF-8';
     result := idHTTP.Post(sendUrl, Params);
      finally
      Params.Free;
   end;
  finally
    FreeAndNil(idHTTP);
 end;

 end;

我需要该函数GetDeviceRegeistrationID返回一个注册 id 数组,所以我可以修改 Push 方法。

4

2 回答 2

2

如何将文本从 TListView 的项目分配到字符串数组的示例。

function TdmPush.GetDeviceRegistrationId: TArray<string>;
var
  i: Integer;
begin
  SetLength(Result, myListView.Items.Count);
  ... 
  // Fill the array
  for i := 0 to myListView.Items.Count-1 do
    Result[i] := myListView.Items[i].Text;
end;
于 2015-06-09T11:00:51.453 回答
1

在 Delphi 2010+ 的情况下,您可以使用 LURD 的答案(您最好这样做 - 用于轻松的类型兼容性)

对于早期的 Delphi,您必须使用另一种类型:

uses Types;
function TdmPush.GetDeviceRegistrationId: tStringDynArray;
///...the rest is the same as with LU RD...

另外要独立于 Delphi RTL,您可以自己声明类型

type MyStringsArray = array of string;
function TdmPush.GetDeviceRegistrationId: MyStringsArray ;
///...the rest is the same as with LU RD...

PS。我知道 Delphi 2009 正式也有 TArray,但 2009 年使用泛型是通往地狱的门票。

聚苯乙烯。如果您无法提前知道数组中字符串的确切数量,那么为了扩展堆内存管理,请使用特殊类:

uses Generics.Collections;
function TdmPush.GetDeviceRegistrationId: TArray<string>;
var ls: TList<string>;
begin
   ls := TList<string>.Create;
   try
     ls.Add('aaaa');
     ls.Add('bbb');
     ls.Add('cccccc');
 ....
     ls.Add('$%#$#');

     Result := ls.ToArray();
   finally
     ls.Destroy;
   end;
end; 

为了从字符串的一维向量中懒惰地填充 ListView,可以使用 LiveBinding。

总体思路 - http://docwiki.embarcadero.com/RADStudio/XE8/en/Mobile_Tutorial:_Using_LiveBindings_to_Populate_a_ListView_(iOS_and_Android)

使用 TStringList 作为绑定数据源 - http://www.webdelphi.ru/2011/11/firemonkey-ot-prostogo-k-slozhnomu-3-komponenty-fmx-spiski-prodolzhenie/

于 2015-06-09T11:11:55.763 回答