我开始使用BLE113和Android编程。我遵循了本网站的指导原则:
当我按照教程学习时,一切都很顺利。然后我开始玩代码。我决定在应用程序上阅读它,而不是在Android终端上读取距离和UUID。每次运行应用程序时都会关闭该应用程序并收到以下消息: “不幸的是, app name 已停止”。 我真的不明白为什么会这样。 以下是我的应用崩溃时的代码:
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, org.altbeacon.beacon.Region region) {
for (Beacon oneBeacon: beacons) {
// Log.d(Tag, "distance:"+oneBeacon.getDistance() + "id:" +oneBeacon.getId1()+ "/" + oneBeacon.getId2()+"/" + oneBeacon.getId3());
TextView distance = (TextView) findViewById(R.id.distanceText);
distance.setText(""+oneBeacon.getDistance());
}
}
以下是不崩溃的时间:
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, org.altbeacon.beacon.Region region) {
for (Beacon oneBeacon: beacons) {
Log.d(Tag, "distance:"+oneBeacon.getDistance() + "id:" +oneBeacon.getId1()+ "/" + oneBeacon.getId2()+"/" + oneBeacon.getId3());
//TextView distance = (TextView) findViewById(R.id.distanceText);
//distance.setText(""+oneBeacon.getDistance());
}
}
完整代码发布在此处:
https://github.com/Boniface316/androidProjects#androidprojects
我在4周前开始使用Android编程并且还在学习,我真的不知道为什么我收到这条消息。非常感谢任何建议或反馈。
答案 0 :(得分:1)
您应该始终使用调试工具来使用eclipse或Android Studio获取错误。这是找到问题的最佳方式
据我所知,你应该删除distance
这个方法的初始化。
将其声明为字段:
private TextView distance;
在onCreate()
distance = (TextView) findViewById(R.id.distanceText);
然后
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, org.altbeacon.beacon.Region region) {
for (Beacon oneBeacon: beacons) {
// Log.d(Tag, "distance:"+oneBeacon.getDistance() + "id:" +oneBeacon.getId1()+ "/" + oneBeacon.getId2()+"/" + oneBeacon.getId3());
distance.setText(distance.getText() + " | "+oneBeacon.getDistance());
}
}
还要将循环代码更改为:
distance.setText(distance.getText() + " | "+oneBeacon.getDistance());
否则你会覆盖它
答案 1 :(得分:0)
我不知道灯塔的事情......但我想,
从其他线程调用didRangeBeaconsInRegion方法,该线程不是主UI线程。
在android中,UI相关的工作需要在主线程中完成,网络相关的工作必须在一个单独的线程中完成。
我猜beacon是在另一个线程中使用网络连接,并在自己的网络线程中调用此方法。
尝试使用handler将消息发送到主线程以进行UI更新。