gpt4 book ai didi

Android GPS 定位 Fedor 的方式 - "Only the original thread that created a view hierarchy can touch its views"

转载 作者:行者123 更新时间:2023-11-30 04:20:16 24 4
gpt4 key购买 nike

我关注这个帖子 What is the simplest and most robust way to get the user's current location on Android?

我对这个帖子有很多疑问,但不幸的是我没有足够的声望在那里回复,所以我必须创建一个单独的帖子。给您带来的不便,我们深表歉意。

将代码复制并粘贴到我的应用程序中,它可以在我的三星 S2 上运行,但不能在模拟器 (2.3) 上运行。

我的问题:

  1. 在模拟器中运行时,代码永远不会到达 onLocationChanged() 方法,而是等待 20 秒(由 timer1 设置的超时)以启动 GetLastLocation 的 run()。为什么?

  2. 现在,总是调用 GetLastLocation 类的 run() 方法,我得到了上面的异常。

    (E/AndroidRuntime(436): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.).

我猜错误发生在我的代码中:

    public LocationResult locationResult = new LocationResult()
{
@Override
public void gotLocation(final Location location)
{
Log.i(LOG_TAG, "gotLocation");
if (location == null)
{
Log.i(LOG_TAG, "Cannot get location");
}
else
{
Log.i(LOG_TAG, "Lat: " + location.getLatitude() + " Long:" + location.getLongitude());
tv = (TextView) findViewById(R.id.my_text); // <<< error here!!!
tv.setText(lat + "," + lon);
}
}
};

TextView tv 在我的主 Activity 中初始化,它调用 MyLocation myLocation = new MyLocation();myLocation.getLocation(this, locationResult);。设计与帖子相同。请问GetLastLocation的run()是不是在另一个线程中调用的?为什么是这样?有没有人遇到同样的问题?

非常感谢!

最佳答案

使用模拟器时,您需要为其设置当前位置。它可以通过几种不同的方式来完成。找他们 here .我认为开始测试的最简单方法是使用 telnetgeo 命令。

因为您可以使用 findViewById,所以我想您在某些 Activity 的内部类中。所以,使用 runOnUiThread更新你的观点的方法

runOnUiThread(new Runnable() {
@Override
public void run() {
tv = (TextView) findViewById(R.id.my_text);
tv.setText(lat + "," + lon);
}
});

在示例代码中,位置更新是通过计时器任务接收的,这就是它在单独的线程中运行的原因。

关于Android GPS 定位 Fedor 的方式 - "Only the original thread that created a view hierarchy can touch its views",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9367378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com