应用程序要处理我使用这个组件意图:德尔福从意图提取多个额外的数据崩溃,段错误11
https://github.com/barisatalay/delphi-android-broadcast-receiver-component。
我的应用程序有2个不同的意图接收器。作为浮子的阵列的第一个目的输出只是1个标记(DATA),该第二意图具有3个标签(SUM_DATA,MIN_DATA和MAX_DATA)是浮动的每个阵列。
这是我如何注册他们:
procedure TMainScreen.FormCreate(Sender: TObject);
begin
HRBroadcastReceiver.RegisterReceive;
AccelBroadcastReceiver.RegisterReceive;
end;
procedure TMainScreen.Button3Click(Sender: TObject); //start button
begin
HRDataStr := StringToJString('DATA');
SUMDataStr := StringToJString('SUM_DATA');
MINDataStr := StringToJString('MIN_DATA');
MAXDataStr := StringToJString('MAX_DATA');
HRBroadcastReceiver.Add(HR_DATA);
AccelBroadcastReceiver.Add(ACCEL_DATA);
end;
这里是我的解析代码:
procedure TMainScreen.AccelBroadcastReceiverReceive(Context: JContext;
Intent: JIntent);
var
MINArr, MAXArr, SUMArr: TJavaArray<Single>;
csv_buffer: string;
begin
{$I-}
try
if Intent.hasExtra(SUMDataStr) = true then
begin
SUMArr := Intent.getFloatArrayExtra(SUMDataStr);
if (SUMArr <> nil) and (SUMArr.Length > 0) then
begin
ACCEL_SUM := SUMArr[0];
if (ACCEL_SUM <= no_data) then ACCEL_SUM := -1;
end else
ACCEL_SUM := -1;
end;
if Intent.hasExtra(SUMDataStr) = true then
begin
MINArr := Intent.getFloatArrayExtra(MINDataStr);
if (MINArr <> nil) and (MINArr.Length > 0) then
begin
ACCEL_MIN := MINArr[0];
if (ACCEL_MIN <= no_data) then ACCEL_MIN := -1;
end else
ACCEL_MIN := -1;
end;
if Intent.hasExtra(SUMDataStr) = true then
begin
MAXArr := Intent.getFloatArrayExtra(MAXDataStr);
if (MAXArr <> nil) and (MAXArr.Length > 0) then
begin
ACCEL_MAX := MAXArr[0];
if (ACCEL_MAX <= no_data) then ACCEL_MAX := -1;
end else
ACCEL_SUM := -1;
if ((ACCEL_SUM = -1) and (ACCEL_MAX = -1) and (ACCEL_MIN = -1)) then
begin
HR := -1;
Label2.Text := FloatToStr(HR);
end;
csv_buffer := FloatToStr(HR) + ',' + FloatToStr(ACCEL_SUM) + ',' + FloatToStr(ACCEL_MAX) + ',' + FloatToStr(ACCEL_MIN);
if (Remcue.IsChecked = true) then csv_buffer := csv_buffer + ',' + FloatToStr(HRV) + ',' + IntToStr(STAGE);
Remcue.Text := 'REM Alarm (beta) REM detected:' + IntToStr(remcue.Tag);
Label1.Text := FloatToStr(ACCEL_SUM);
Memo1.Lines.Add(csv_buffer);
AccelTimer.Tag := 0;
end;
{$I+}
except
on E : Exception do
Memo1.Lines.Add('Accel Exception = ' + E.Message);
end;
end;
有时它不工作,因为它应该。它确实点击开始按钮后立即崩溃有时段错误11的应用程序(在我的情况将Button3,见上面的代码)。有时候,我得到异常: 访问冲突在地址C84E2FC6,访问地址00000018和应用程序将继续正常运行。或者它可以正常运行。
我敢肯定,我失去了一些东西 - 我是新来的Delphi Android上的编码。谢谢!
UPD1:感谢雷米勒博我已经修正了一些复制/粘贴错误。
这些复制/粘贴错误是你的问题的重要元凶。而不是编辑你的问题来解决它们(从而使整个问题无效),你应该将固定代码作为答案来代替。我已恢复您的编辑。但是,如果您修复了错误并仍然存在问题,那么请使用最新的代码更新问题。顺便说一句,请调试你的代码。您应该能够报告崩溃的确切代码行。 –
无法复制粘贴错误。错误不是复制粘贴。 –