應用程序要處理我使用這個組件意圖:德爾福從意圖提取多個額外的數據崩潰,段錯誤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:感謝雷米勒博我已經修正了一些複製/粘貼錯誤。
這些複製/粘貼錯誤是你的問題的重要元兇。而不是編輯你的問題來解決它們(從而使整個問題無效),你應該將固定代碼作爲答案來代替。我已恢復您的編輯。但是,如果您修復了錯誤並仍然存在問題,那麼請使用最新的代碼更新問題。順便說一句,請調試你的代碼。您應該能夠報告崩潰的確切代碼行。 –
無法複製粘貼錯誤。錯誤不是複製粘貼。 –