我得到使用JNI採用Delphi XE7從Android圖庫位圖工作。同樣的代碼,用Delphi XE6工作:在Image1.Bitmap.Assign(面),我得到一個破碎類錯誤充分利用通過JNI採用Delphi庫中的位圖,但沒有對德爾福XE7,德爾福XE6
unit home;
interface
uses
FMX.Platform.Android, Androidapi.Helpers, Androidapi.JNI.App, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNIBridge,
FMX.Helpers.Android, Androidapi.JNI.Net, Androidapi.JNI.Provider, Androidapi.JNI.Media, Androidapi.JNI.JavaTypes,
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, System.Messaging,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
FMX.Objects, FMX.Surfaces, Data.DB, MemDS, DBAccess, MyAccess, Strutils,
FMX.Layouts, FMX.Memo;
type
TForm1 = class(TForm)
ToolBar1: TToolBar;
SpeedButton1: TSpeedButton;
Label1: TLabel;
Image1: TImage;
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
const ScanRequestCode = 0;
var FMessageSubscriptionID: Integer;
procedure HandleActivityMessage(const Sender: TObject; const M: TMessage);
function OnActivityResult(RequestCode, ResultCode: Integer; Data: JIntent): Boolean;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
{$R *.NmXhdpiPh.fmx ANDROID}
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
Intent: JIntent;
begin
FMessageSubscriptionID := TMessageManager.DefaultManager.SubscribeToMessage(TMessageResultNotification,
HandleActivityMessage);
Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_GET_CONTENT);
Intent.setType(StringToJSTring('image/*'));
SharedActivity.startActivityForResult(Intent,0);
end;
procedure TForm1.HandleActivityMessage(const Sender: TObject; const M: TMessage);
begin
if M is TMessageResultNotification then
OnActivityResult(TMessageResultNotification(M).RequestCode, TMessageResultNotification(M).ResultCode,
TMessageResultNotification(M).Value);
end;
function TForm1.OnActivityResult(RequestCode, ResultCode: Integer; Data: JIntent): Boolean;
var
uri: Jnet_Uri;
bitmap: JBitmap;
surface: TBitmapSurface;
begin
TMessageManager.DefaultManager.Unsubscribe(TMessageResultNotification, FMessageSubscriptionID);
FMessageSubscriptionID := 0;
if Assigned(Data) then
begin
try
uri:=Data.getData;
bitmap := TJImages_Media.JavaClass.getBitmap(SharedActivity.getContentResolver, uri);
surface := TBitmapsurface.Create;
JBitMapToSurface(bitmap,surface);
// Fails here in Delphi XE7
//Image1.Bitmap.Assign(surface);
finally
surface.Free;
Result := true;
end;
end
else Result := false;
end;
end.
代碼失敗。
Delphi XE7中發生了什麼變化導致了此錯誤?
TBitmapsurface應在嘗試之前創建.. finally塊 – mjn 2014-10-18 12:14:25
什麼是確切的錯誤消息文本? – mjn 2014-10-18 12:15:57
最後和免費電話不需要與ARC – 2014-10-18 12:23:17