Delphi XE6 android,带estimote信标转换

Delphi XE6 android,带estimote信标转换,android,delphi,Android,Delphi,我被困在Java代码到Delphi的转换中。我已经转换了所有estimote beacon sdk,还创建了classes.dex。我可以调用beacon方法。但是estimote beacon示例的部分java代码无法转换为delphi。我不知道该怎么做。下面是我需要在Delphi XE6中转换的java代码: beaconManager.SetRangListener(新的beaconManager.RangListener(){ @凌驾 发现公共无效OnBeacons(区域,最终列表信标)

我被困在Java代码到Delphi的转换中。我已经转换了所有estimote beacon sdk,还创建了classes.dex。我可以调用beacon方法。但是estimote beacon示例的部分java代码无法转换为delphi。我不知道该怎么做。下面是我需要在Delphi XE6中转换的java代码:

beaconManager.SetRangListener(新的beaconManager.RangListener(){
@凌驾
发现公共无效OnBeacons(区域,最终列表信标){
//请注意,结果不会在UI线程上传递。
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
//请注意,此处报告的信标已按估计值排序
//设备和信标之间的距离。
getActionBar().setSubtitle(“找到的信标:+beacons.size());
适配器。替换为(信标);
}
});
}
});
私有void connectToService(){
getActionBar().setSubtitle(“扫描…”);
adapter.replaceWith(Collections.emptyList());
connect(新的beaconManager.ServiceReadyCallback(){
@凌驾
服务日上的公共无效(){
试一试{
信标管理器。启动(所有预计信标区域);
}捕获(远程异常){
Toast.makeText(ListBeaconsActivity.this,“无法开始测距,发生了可怕的事情”,
Toast.LENGTH_LONG).show();
Log.e(标记“无法开始测距”,e);
}
}
});
}
对于servicereadycallback beacon接口,我创建了如下delphi类:

TBeaconServiceReadyCallback=class(TJavaLocal,JBeaconManager\u ServiceReadyCallback)
私有的
F家长:TForm4;
公众的
构造函数创建(父级:TForm4);
函数等于(o:JObject):布尔;cdecl;
函数getClass:Jlang_类;cdecl;
函数hashCode:整数;cdecl;
程序通知;cdecl;
程序通知所有人;cdecl;
函数toString:JString;cdecl;
程序等待;超载;cdecl;
程序等待(毫秒:Int64);超载;cdecl;
过程等待(毫秒:Int64;纳米:整数);超载;cdecl;
服务程序;cdecl;
结束;
当我尝试调用beaconmanager.connect(TBeaconServiceRead.Create(self))时,出现如下错误: java.lang.NullPointerExceptio:回调不能为null。 如何克服这个例外?我们将非常感谢您的帮助

这是我的OnService日常方法:

procedure TBeaconServiceRead.onServiceReady;
var
  fregion: JRegion;
begin
  CallInUIThreadAndWaitFinishing(
    procedure
    begin
      fregion := TJRegion.JavaClass.init
        (StringToJString('rid'), nil, nil, nil);
      bm.startRanging(fregion);
      TForm4(fParent).Memo1.Lines.Add('beacon manager connect: ' + JStringToString(fregion.getProximityUUID));
    end);
end;

我不了解该服务,尽管我的第一个问题和建议是,您能否在不同的行中将Create方法和Connect方法彼此分离,并在它们之间放置一条调试消息,如:tbeaconservicerad bsr=tbeaconservicerad.Create(self);写入(“调试1”);信标管理器连接(bsr);根据这个link()上的示例,它实现了ServiceReadyCallback方法;需要回拨,但我没有回拨。