gpt4 book ai didi

java - 需要帮助调试我的 android-java 代码

转载 作者:行者123 更新时间:2023-12-01 15:34:25 24 4
gpt4 key购买 nike

Log cat 显示“运行时异常 - 无法在未调用 Looper.prepare 的线程内创建处理程序?我想在固定的时间间隔后通过短信将手机的位置更新发送到其他手机。请帮忙。建议还有省电的方法

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
et1 = (EditText)findViewById(R.id.editText1);
et2 = (EditText)findViewById(R.id.editText2);
b1 = (Button)findViewById(R.id.button1 );
t1 = new Timer();
t2 = new Timer();
lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
listener = new LocationListener() {

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub

}

@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub

}

@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
SmsManager sm = SmsManager.getDefault();
String message = String.format(
"New Location \n Longitude: %1$s \n Latitude: %2$s",
location.getLongitude(), location.getLatitude() );
String number = "5556";
sm.sendTextMessage(number,null,message,null,null);
}
};

在每个固定时间间隔后安排请求更新

t1.scheduleAtFixedRate(new TimerTask() {

    @Override
public void run() {
// TODO Auto-generated method stub
lm.requestSingleUpdate(LocationManager.GPS_PROVIDER, listener,null);
}
},0,300000);

}

}

最佳答案

TimerTask中并不清楚文档,但我怀疑每个任务都在自己的线程上运行。另外,LocationManager.requestSingleUpdate 的文档您正在使用的调用说“如果 Looper 为 null,则将在主线程上调用回调”,但我怀疑这是错误的,因为它与具有替代签名的签名不一致,后者表示“如果 Looper 为 null,则回调将在当前线程上调用”。如果后者是正确的,那就可以解释你的问题,因为你正在打电话 requestSingleUpdate在您的TimerTask内线程,没有 Looper .

也许使用 getMainLooper 的结果而不是null最后一个参数为 requestSingleUpdate .

关于java - 需要帮助调试我的 android-java 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9121591/

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