你可以帮助我使用这个功能
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方法。
答案 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。
使用TStringList作为绑定数据源 - http://www.webdelphi.ru/2011/11/firemonkey-ot-prostogo-k-slozhnomu-3-komponenty-fmx-spiski-prodolzhenie/