{Hint: save all files to location: C:\adt32\eclipse\workspace\asyncdemo\jni }
unit unit1;
{$mode delphi}
interface
uses
Classes, SysUtils, Laz_And_Controls, AndroidWidget, user_service_intf,
user_service_intf_proxy, And_Log_h;
type
{ TAndroidModule1 }
TAndroidModule1 = class(jForm)
jAsyncTask1: jAsyncTask;
jButton1: jButton;
jDialogProgress1: jDialogProgress;
jEditText1: jEditText;
jListView1: jListView;
procedure AndroidModule1Create(Sender: TObject);
procedure AndroidModule1Destroy(Sender: TObject);
procedure jAsyncTask1DoInBackground(Sender: TObject; progress: Integer;
out keepInBackground: boolean);
procedure jAsyncTask1PostExecute(Sender: TObject; progress: integer);
procedure jAsyncTask1PreExecute(Sender: TObject; out
startProgress: integer);
procedure jButton1Click(Sender: TObject);
private
{private declarations}
procedure LogMessage( psMsg : String );
procedure RunGetUsers;
function CreateUserProxy : UserService;
public
{public declarations}
slUsers : TStringList;
end;
var
AndroidModule1: TAndroidModule1;
implementation
{$R *.lfm}
uses soap_formatter, json_formatter, xmlrpc_formatter, fpc_http_protocol, service_intf;
{ TAndroidModule1 }
procedure TAndroidModule1.jAsyncTask1DoInBackground(Sender: TObject; progress: Integer; out keepInBackground: boolean);
begin
RunGetUsers;
keepInBackground:= False;
end;
procedure TAndroidModule1.AndroidModule1Create(Sender: TObject);
begin
slUsers := tStringList.Create;
end;
procedure TAndroidModule1.AndroidModule1Destroy(Sender: TObject);
begin
slUsers.Free;
end;
procedure TAndroidModule1.jAsyncTask1PostExecute(Sender: TObject; progress: integer);
begin
LogMessage('Dialog Stop');
jDialogProgress1.Stop;
LogMessage('Async Stop');
jAsyncTask1.Done;
LogMessage('List View Assign');
jListView1.Items.Assign(slUsers);
ShowMessage(slUsers.text);
end;
procedure TAndroidModule1.jAsyncTask1PreExecute(Sender: TObject; out startProgress: integer);
begin
startProgress:= 0; //out param !
LogMessage('Dialog Start');
jDialogProgress1.Start; //or Show
end;
procedure TAndroidModule1.jButton1Click(Sender: TObject);
begin
if not jAsyncTask1.Running then
begin
//ShowMessage('Execute ... ');
jAsyncTask1.Execute
end
else
ShowMessage('Running...');
end;
procedure TAndroidModule1.LogMessage(psMsg: String);
begin
__android_log_write(ANDROID_LOG_INFO,PChar(Text),PChar(psMsg));
end;
procedure TAndroidModule1.RunGetUsers;
var
lpUserService : UserService;
loUserArray : TUserArray;
loUser : TUser;
i : Integer;
begin
LogMessage('Create proxy');
lpUserService := CreateUserProxy;
LogMessage('proxy Get List');
loUserArray := lpUserService.GetList();
slUsers.Clear;
LogMessage('List Length ' + IntToStr(loUserArray.Length));
for i := 0 to loUserArray.Length-1 do
begin
loUser := loUserArray[i];
slUsers.Add( loUser.UserName );
end;
end;
function TAndroidModule1.CreateUserProxy: UserService;
var
buffsimplecall, buffTransport, buffFormat : string;
function GetServiceURL( WebServiceAddress : String ):String;
begin
Result := WebServiceAddress + '/services/UserService';
end;
begin
buffFormat := 'json';
buffsimplecall := 'http:Address=' + GetServiceURL(jEditText1.Text) + '/?format=' + buffFormat;
buffTransport := buffsimplecall;
buffFormat := buffFormat + ':';
LogMessage(buffTransport);
LogMessage(buffFormat);
Result := TUserService_Proxy.Create( 'UserService', buffFormat, buffTransport );
end;
end.