Android应用每次运行时都会崩溃

时间:2016-01-12 01:35:46

标签: java android

我开始使用BLE113和Android编程。我遵循了本网站的指导原则:

http://www.software7.com/blog/creating-a-beacon-app-for-android-in-less-than-10-minutes-from-scratch/

当我按照教程学习时,一切都很顺利。然后我开始玩代码。我决定在应用程序上阅读它,而不是在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编程并且还在学习,我真的不知道为什么我收到这条消息。非常感谢任何建议或反馈。

2 个答案:

答案 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更新。