Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Blackberry 更新连续GPS定位的间隔值_Blackberry_Gps_Location_Location Provider - Fatal编程技术网

Blackberry 更新连续GPS定位的间隔值

Blackberry 更新连续GPS定位的间隔值,blackberry,gps,location,location-provider,Blackberry,Gps,Location,Location Provider,我正在开发一个黑莓应用程序,它应该以固定的时间间隔更新位置。可以通过滑块选择/更改间隔值。它在1分钟、2分钟、5分钟、30分钟等之间变化。在第一次加载(启动应用程序)时,定位间隔为30秒。在此之后,我将滑块值存储在一个持久存储中,并根据设置的间隔相应地更新位置。运行到更新位置的后台线程如下所示: private boolean startLocationUpdate() { 布尔retval=false; 尝试 { LocationProvider LocationProvider=Locati

我正在开发一个黑莓应用程序,它应该以固定的时间间隔更新位置。可以通过滑块选择/更改间隔值。它在1分钟、2分钟、5分钟、30分钟等之间变化。在第一次加载(启动应用程序)时,定位间隔为30秒。在此之后,我将滑块值存储在一个持久存储中,并根据设置的间隔相应地更新位置。运行到更新位置的后台线程如下所示:

private boolean startLocationUpdate()
{
布尔retval=false;
尝试
{
LocationProvider LocationProvider=LocationProvider.getInstance(null);
if(locationProvider==null)
{
Runnable showGpsUnsupportedDialog=new Runnable()
{
公开募捐
{
警告(“此平台不支持GPS,正在退出…”);
//系统出口(1);
}
};
UiApplication.getUiApplication().invokeAndWait(showGpsUnsupportedDialog);//要求事件调度程序线程尽快显示对话框。
}
其他的
{
setLocationListener(新的LocationListenerImpl(),间隔,-1,-1);
retval=true;
}
}
捕获(位置异常)
{
System.err.println(“未能实例化LocationProvider对象,正在退出…”);
系统错误打印项次(le);
系统出口(0);
}
返回返回;
}
私有类LocationListenerImpl实现LocationListener
{
公共无效位置已更新(位置提供程序,位置位置)
{
if(location.isValid())
{
双经度=location.getQualifiedCoordinates().getLongitude();
双纬度=位置。getQualifiedCoordinates()。getLatitude();
更新定位屏幕(纬度、经度);
}
}
public void providerStateChanged(LocationProvider provider,int newState)
{
}
}
私有空间更新定位屏幕(最终双纬度、最终双经度)
{
UiApplication.getUiApplication().invokeAndWait(新的Runnable())
{
公开募捐
{
双纬度=纬度;
双纵=经度;
lblitality.setText(双toString(lat));
间距。setText(“,”);
lblLongitude.setText(Double.toString(longi));
}
});
}  
除此之外,还有一个可用的“刷新”按钮,一旦单击,它将立即开始获取位置更新。此按钮调用另一个类获取位置的方法。方法如下:

试试看{
标准myCriteria=新标准();
myCriteria.setCostAllowed(false);
LocationProvider myLocationProvider=LocationProvider.getInstance(myCriteria);
双标题=0;
双速=0;
试一试{
Location myLocation=myLocationProvider.getLocation(6000);
if(myLocation.isValid())
{
双经度=myLocation.getQualifiedCoordinates().GetLength();
双纬度=myLocation.getQualifiedCoordinates().getLatitude();
}
UiApplication.getUiApplication().invokeLater(新的Runnable()){
公开募捐{
//对话框。警报(“位置更新”);
}
});
设置位置(myLocation.getQualifiedCoordinates()、速度、航向);
}捕获(中断异常iex){
System.out.println(iex.getMessage());
}捕获(位置异常){
System.out.println(lex.getMessage());
}
}捕获(位置异常){
System.out.println(lex.getMessage());
}
我面临的问题:

1)间隔值不变。我通过从持久存储中选取值来实现更改,如下所示:

if(persistentstoreheloper.persistentHashtable.containsKey(“gpsInterval”))
{
字符串intervalValue=((字符串)PersistentStoreHelper.persistenthastable.get(“gpsInterval”);
MyScreen.interval=Integer.parseInt(intervalValue);
}
此页面永远不会为空,因为此页面的导航会向其插入30分钟的值

2)单击“刷新”按钮后,后台线程似乎被取消。它不再以任何间隔值运行

我了解到,只创建了一个位置提供程序实例,在获取位置后,使用“刷新”将取消该实例,因此后台线程停止这是真的吗?如果是,我如何才能达到我想要的结果

编辑:gpsInterval值如下所示:

if(persistentstoreheloper.persistentHashtable.containsKey(“gpsInterval”))
{
字符串intervalValue=((字符串)PersistentStoreHelper.persistenthastable.get(“gpsInterval”);
间隔=整数.parseInt(InterValveValue);
}
其他的
{
间隔=10;
}
保存时间间隔 因此,首先,请确保当您让用户通过滑块更改更新间隔时,您可以将其正确保存到
PersistentStore
。代码应该如下所示:

//注意:我建议将滑块值持久化为整数,而不是字符串,
//但是,原始代码使用字符串,所以这就是它使用的
put(“gpsInterval”,(新整数(intervalSlider.getValue()).toString());
PersistentObject po=PersistentStore.getPersistentObject(应用程序包ID);
采购订单设置内容(哈希表);
po.commit();
因为您没有发布该代码,所以我只想确保它被正确地保存到持久性存储中

更新位置提供程序/侦听器 另一个问题是,是一个问题,即在
startLocationUpdate()
中使用以下代码启动位置更新:

locationProvider.setLocationListener(新Loc