如何修改函数,以便返回一个字符串数组

时间:2015-06-09 10:54:19

标签: android delphi firemonkey delphi-xe8

你可以帮助我使用这个功能

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方法。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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。我知道正式的德尔福2009也有TArray,但2009年的通用仿制药是地狱之门。

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

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,一个cn使用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/