在我的应用程序中我有一个后台服务器和内部服务器类我有计时器和内部计时器我有一个locationManager来查找位置:
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
LocationListener locationListener = new MyLocationListener();
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 5000, 10,
locationListener);
但在这里我收到了这个错误:
java.lang.runtimeexception can't create handler inside thread that has not called looper.prepare();
我的问题在这里如何在timer内部使用locationManager?
答案 0 :(得分:2)
static Activity ac;
public static void setActivity(Activity a) {
ac = a;
}
并在您的活动类中执行此操作:
MyService.setActivity(this);
现在这个帖子就像这样:
(ac).runOnUiThread(new Runnable() {
@Override
public void run() {});
我强烈建议你做我喜欢做的事。
答案 1 :(得分:1)
如果您不知道Looper线程是什么,那么异常消息可能看起来很神秘,但它基本上意味着它所说的内容:您无法创建处理程序(或包含处理程序的任何对象)一个不是Looper的线程。定时器线程不是Loopers。 Android中的许多内容只能在UI线程上创建,这是一个Looper。
尝试使用LocationListener" inside"无论如何,计时器并没有多大意义。 LocationListener的方法由系统调用,而不是由您的代码调用。我建议搜索和阅读事件驱动的编程。
答案 2 :(得分:0)
((Activity) getBaseContext()).runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
LocationListener locationListener = new MyLocationListener();
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 5000, 10,
locationListener);
}
});