我正在尝试从Intent中获取数据。它作为包含一个元素的Float数组传递。我试过这段代码,但它崩溃了:
procedure TMainScreen.BroadcastReceiver2Receive(Context: JContext; Intent: JIntent);
{$IFDEF ANDROID}
var
Temp: String;
Hr1: single;
Bundle :Jbundle;
begin
button2.Text:= 'triggered';
if Intent.hasExtra(stringtojstring('DATA')) = true then
begin
bundle := intent.getExtras();
button1.Text:= 'got data';
hr1:= bundle.getFloatArray(stringtojstring('DATA'))[0];
button2.Text:= floattostr(hr1);
end;
{$ELSE}
begin
{$ENDIF}
end;我肯定我没有正确地处理数组。我该怎么做呢?
发布于 2017-09-13 16:44:43
您应该使用JIntent.getFloatArrayExtra()而不是JIntent.getExtras()。
但是,无论哪种方式,在访问数组元素之前,都需要检查返回的数组是否为nil。如果不是,则还应检查数组长度实际上是否大于0。
尝试更像这样的东西:
{$IFDEF ANDROID}
procedure TMainScreen.BroadcastReceiver2Receive(Context: JContext; Intent: JIntent);
var
DataStr: JString;
Arr: TJavaArray<Single>;
Hr1: single;
begin
Button2.Text := 'triggered';
DataStr := StringToJString('DATA');
if Intent.hasExtra(DataStr) then
begin
Button1.Text := 'got data';
Arr := Intent.getFloatArrayExtra(DataStr);
if (Arr <> nil) and (Arr.Length > 0) then
begin
Hr1 := Arr[0];
Button2.Text := FloatToStr(Hr1);
end else
Button2.Text := 'no value';
end;
end;
{$ENDIF}https://stackoverflow.com/questions/46195752
复制相似问题