Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#24

AW: Firemonkey Frame Fehler (Android)

  Alt 14. Jul 2014, 16:51
Sollen der adb-Speicherort, der aapt-Speicherort und der Sdk-api-Level Speicherort leer bleiben?
Gute Frage, aber hier rächt sich natürlich ganz übel das "ich pack mal alles in einen Topf rein".

Wenn du deinen Code in Module unterteilst, dann kannst du durch Austauschen der echten Module gegen Dummy-Module schauen, wo genau das Problem liegt.

Ein simples Modul wäre ja das Beschaffen der Events:
Delphi-Quellcode:
unit Event;

interface

type
  TEvent = class
  private
    FShowID : Integer;
    FEventID : Integer;
    FEventName : string;
    FSiteID : Integer;
    FMediaNumber : Integer;
    FLanguageVersionID : Integer;
    FShowTime : TDateTime;
  public
    constructor Create( ShowID, SiteID, EventID, MediaNumber, LanguageVersionID : Integer; ShowTime : TDateTime;
      EventName : string );
    property ShowID : Integer read FShowID;
    property ShowTime : TDateTime read FShowTime;
    property SiteID : Integer read FSiteID;
    property EventID : Integer read FEventID;
    property EventName : string read FEventName;
    property MediaNumber : Integer read FMediaNumber;
    property LanguageVersionID : Integer read FLanguageVersionID;
  end;

implementation

{ TEvent }

constructor TEvent.Create( ShowID, SiteID, EventID, MediaNumber, LanguageVersionID : Integer; ShowTime : TDateTime;
  EventName : string );
begin
  inherited Create;
  FShowID := ShowID;
  FSiteID := SiteID;
  FEventID := EventID;
  FMediaNumber := MediaNumber;
  FLanguageVersionID := LanguageVersionID;
  FShowTime := ShowTime;
  FEventName := EventName;
end;

end.
Der Service als Interface
Delphi-Quellcode:
unit EventService;

interface

uses
  Event;

type
  IEventService = interface
    ['{601B8893-EB6D-4582-AC17-65DB0D09DD4F}']
    function GetEvents( EventID : Integer; FromDate, ToDate : TDate ) : TArray<TEvent>;
  end;

implementation

end.
Und einen Testservice, damit wir nicht immer auf den Webservice zugreifen müssen und ganz wichtig die Anwendung unabhängig vom Webservice prüfen können.
Delphi-Quellcode:
unit TestEventService;

interface

uses
  System.Generics.Collections,
  Event,
  EventService;

type
  TTestEventService = class( TInterfacedObject, IEventService )
  public
    function GetEvents( EventID : Integer; FromDate : TDate; ToDate : TDate ) : TArray<TEvent>;
  end;

implementation

uses
  System.SysUtils;

{ TTestEventService }

function TTestEventService.GetEvents( EventID : Integer; FromDate, ToDate : TDate ) : TArray<TEvent>;
var
  LEvents : TList<TEvent>;
begin
  // Build some Dummy Events
  LEvents := TList<TEvent>.Create;
  try
    LEvents.Add( TEvent.Create( 1, 1, EventID, 1, 1234, FromDate + EncodeTime( 14, 0, 0, 0 ), 'Dummy-Event 1' ) );
    LEvents.Add( TEvent.Create( 2, 1, EventID, 1, 1234, FromDate + EncodeTime( 15, 0, 0, 0 ), 'Dummy-Event 2' ) );
    LEvents.Add( TEvent.Create( 3, 1, EventID, 1, 1234, FromDate + EncodeTime( 16, 0, 0, 0 ), 'Dummy-Event 3' ) );

    Result := LEvents.ToArray;
  finally
    LEvents.Free;
  end;
end;

end.
Und ein kleiner Test sieht dann so aus:
Delphi-Quellcode:
program dp_181082;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.Generics.Collections,
  System.SysUtils,
  EventService in 'EventService.pas',
  Event in 'Event.pas',
  TestEventService in 'TestEventService.pas',
  WebEventService in 'WebEventService.pas';

procedure ShowEvents( EventService : IEventService );
var
  LEvents : TList<TEvent>;
  LEvent : TEvent;
begin
  LEvents := TObjectList<TEvent>.Create( True );
  try
    LEvents.AddRange( EventService.GetEvents( 1, EncodeDate( 2014, 01, 01 ), EncodeDate( 2014, 01, 02 ) ) );

    for LEvent in LEvents do
      begin
        Writeln( LEvent.ShowID, '-', FormatDateTime( 'dd.mm.yyyy hh:nn', LEvent.ShowTime ), '-', LEvent.EventName );
      end;

  finally
    LEvents.Free;
  end;
end;

begin
  try
    ShowEvents( TTestEventService.Create );
  except
    on E : Exception do
      Writeln( E.ClassName, ': ', E.Message );
  end;
  ReadLn;

end.
Wenn das alles läuft, dann testet man das mit dem echten Service. Und wenn es dabei dann zu Fehler kommt (beim Erzeugen, zur Laufzeit) dann muss man wohl an diesen Service ran.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat