- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试通过单击按钮来刷新当前位置。该位置可以通过 GPS 或手机信号塔获取,无论哪个可用。我的问题是我从来没有看到“加载屏幕”。我知道当坐标保持为零时,它会立即出现/关闭。有人可以帮助我 - 我在下面做错了什么?
位置不会更新,加载屏幕也不会出现。在没有加载屏幕的情况下,通过多次单击“刷新按钮”,我确实得到了位置。下面是我处理点击“刷新按钮”的代码:
FieldChangeListener refreshImgListener = new FieldChangeListener() {
public void fieldChanged(Field field, int context)
{
Thread backgroundWorker = new Thread(new Runnable() {
public void run() {
refreshCoordinates();
}
});
busyDialog.setEscapeEnabled(false);
busyDialog.show();
backgroundWorker.start();
}
};
refreshCoordinates()
方法如下:
public void refreshCoordinates() {
do
{
getLatitude(handleeGPS.latitude);
getLongitude(handleeGPS.longitude);
} while ((longi == "0.0" || lati == "0.0") || (longi.length() == 0 || lati.length()==0));
UiApplication.getUiApplication().invokeLater( new Runnable()
{
public void run ()
{
lblLatitude.setText(lati);
lblLongitude.setText(longi);
busyDialog.cancel();
}
} );
}
public static String getLatitude(double value)
{
lati= Double.toString(value);
return lati;
}
public static String getLongitude(double value)
{
longi= Double.toString(value);
return longi;
}
public class handleeGPS{
static GPSThread gpsThread;
public static double latitude;
public static double longitude;
public handleeGPS(){
gpsThread = new GPSThread();
gpsThread.start();
}
private static class GPSThread extends Thread{
public void run() {
Criteria myCriteria = new Criteria();
myCriteria.setCostAllowed(false);
int m_bbHandle = CodeModuleManager.getModuleHandle("net_rim_bb_lbs");
if(m_bbHandle>0){
try {
int cellID = GPRSInfo.getCellInfo().getCellId();
int lac = GPRSInfo.getCellInfo().getLAC();
String urlString2 = "http://www.google.com/glm/mmap";
// Open a connection to Google Maps API
ConnectionFactory connFact = new ConnectionFactory();
ConnectionDescriptor connDesc;
connDesc = connFact.getConnection(urlString2);
HttpConnection httpConn2;
httpConn2 = (HttpConnection)connDesc.getConnection();
httpConn2.setRequestMethod("POST");
// Write some custom data to Google Maps API
OutputStream outputStream2 = httpConn2.openOutputStream();//getOutputStream();
WriteDataGoogleMaps(outputStream2, cellID, lac);
// Get the response
InputStream inputStream2 = httpConn2.openInputStream();//getInputStream();
DataInputStream dataInputStream2 = new DataInputStream(inputStream2);
// Interpret the response obtained
dataInputStream2.readShort();
dataInputStream2.readByte();
int code = dataInputStream2.readInt();
//Dialog.alert(code+"");
if (code == 0) {
latitude= dataInputStream2.readInt() / 1000000D;
longitude=dataInputStream2.readInt() / 1000000D;
//Dialog.alert(latitude+"-----"+longitude);
dataInputStream2.readInt();
dataInputStream2.readInt();
dataInputStream2.readUTF();
} else {
System.out.println("Error obtaining Cell Id ");
}
outputStream2.close();
inputStream2.close();
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
} else {
try {
LocationProvider myLocationProvider = LocationProvider.getInstance(myCriteria);
try {
Location myLocation = myLocationProvider.getLocation(300);
latitude = myLocation.getQualifiedCoordinates().getLatitude();
longitude = myLocation.getQualifiedCoordinates().getLongitude();
if(latitude==0.0 && longitude==0.0){
try {
int cellID = GPRSInfo.getCellInfo().getCellId();
int lac = GPRSInfo.getCellInfo().getLAC();
String urlString2 = "http://www.google.com/glm/mmap";
// Open a connection to Google Maps API
ConnectionFactory connFact = new ConnectionFactory();
ConnectionDescriptor connDesc;
connDesc = connFact.getConnection(urlString2);
HttpConnection httpConn2;
httpConn2 = (HttpConnection)connDesc.getConnection();
httpConn2.setRequestMethod("POST");
// Write some custom data to Google Maps API
OutputStream outputStream2 = httpConn2.openOutputStream();
//getOutputStream();
WriteDataGoogleMaps(outputStream2, cellID, lac);
// Get the response
InputStream inputStream2 = httpConn2.openInputStream();
//getInputStream();
DataInputStream dataInputStream2 = new DataInputStream(inputStream2);
// Interpret the response obtained
dataInputStream2.readShort();
dataInputStream2.readByte();
int code = dataInputStream2.readInt();
//Dialog.alert(code+"");
if (code == 0) {
latitude= dataInputStream2.readInt() / 1000000D;
longitude=dataInputStream2.readInt() / 1000000D;
//Dialog.alert(latitude+"-----"+longitude);
dataInputStream2.readInt();
dataInputStream2.readInt();
dataInputStream2.readUTF();
} else {
System.out.println("Error obtaining Cell Id ");
}
outputStream2.close();
inputStream2.close();
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
catch ( InterruptedException iex ) {
return;
}
catch ( LocationException lex ) {
return;
}
} catch ( LocationException lex ) {
return;
}
}
return;
}
}
private static void WriteDataGoogleMaps(OutputStream out, int cellID, int lac)
throws IOException {
DataOutputStream dataOutputStream = new DataOutputStream(out);
dataOutputStream.writeShort(21);
dataOutputStream.writeLong(0);
dataOutputStream.writeUTF("en");
dataOutputStream.writeUTF("Android");
dataOutputStream.writeUTF("1.0");
dataOutputStream.writeUTF("Web");
dataOutputStream.writeByte(27);
dataOutputStream.writeInt(0);
dataOutputStream.writeInt(0);
dataOutputStream.writeInt(3);
dataOutputStream.writeUTF("");
dataOutputStream.writeInt(cellID);
dataOutputStream.writeInt(lac);
dataOutputStream.writeInt(0);
dataOutputStream.writeInt(0);
dataOutputStream.writeInt(0);
dataOutputStream.writeInt(0);
dataOutputStream.flush();
}
}
最佳答案
好的,所以虽然我原来的答案是有效的,新 您发布的代码有一些不同的问题,所以我发布了第二个答案。有很多看起来不正确的东西,我只是重写了你的 handleeGPS
类(class)。我将一一解释我所做的主要更改:
handleeGPS
之前类,我以为它是一个变量,因为小写名称通常用于变量,而不是类。 handleeGPS
类有很多代码要通读,但其中大部分是从 Google 的网络服务获取位置的代码,您在两个地方重复了这些代码。只需创建一个只包含该代码的方法,然后调用它两次。 handleeGPS
上课至GPSHandler
.我不确定 handlee
是一个错误,或者这是您使用的另一种语言中的一个词。无论如何,名称至少应该以大写字母开头。 static
变量和方法。有时,真的应该只有其中之一。 GPS 处理类可能是一个很好的例子,因为该设备只有一个 GPS 系统。但是,要强制执行此代码结构,请不要将所有内容标记为 static
.只需make the class a Singleton ,其中只涉及创建一个 static
成员变量 ( _instance
) 和一个静态方法 ( getInstance()
)。在我的代码中,您将像这样访问该类:GPSHandler gps = GPSHandler.getInstance();
. net_rim_bb_lbs
模块,如果它大于零(这意味着安装了 BB map ),那么您直接转到 Google 网络服务。我认为您希望反过来(如果安装了 BB map ,请尝试设备 GPS)。此外,从 6.0 开始,您需要检查 net_rim_bb_maps
, 也。 getLatitude()
和 getLongitude()
方法实际上是在获取设备位置。这对我来说是一个糟糕的假设。他们只是将数字转换为字符串。因此,没有理由在后台执行此操作(使用 Thread
)。你已经写了你的handleeGPS
类使用后台线程,这很好。一个后台线程就足够了。使用位置信息的 UI 应该也不需要背景 Thread
.我更改了代码以添加 GPSListener
界面。该接口(interface)应该由您的 UI 代码实现,以接收位置更新。没有理由继续循环,询问位置是否不等于 {0.0, 0.0}。那是低效的。使用我的代码,您只会在位置发生变化时收到通知。 handleeGPS
latitude
和 longitude
变量在后台线程上设置,并在 UI 线程上访问。那不安全。两个线程不应该同时读取和写入同一条数据。通过更改代码将位置数据推送到 GPSListener
,它避免了这个问题。 Dialog.alert()
的注释您在handleeGPS
中的代码类,这对您不起作用,因为您不允许从后台进行 UI 调用。我用 UiApplication.getUiApplication().invokeLater()
包围了这些电话。使他们安全。 Thread
。运行您的
refreshCoordinates()
方法:
public void fieldChanged(Field field, int context)
// this is called when your location refresh button is clicked
GPSHandler.getInstance().setListener(this);
GPSHandler.getInstance().requestLocationUpdates();
busyDialog.setEscapeEnabled(false);
busyDialog.show();
}
public void onLocationReceived(Coordinates location) {
lblLatitude.setText(Double.toString(location.getLatitude()));
lblLongitude.setText(Double.toString(location.getLongitude()));
busyDialog.cancel();
}
implements GPSListener
,这是一个接口(interface),在这里定义:
public interface GPSListener {
public void onLocationReceived(Coordinates location);
}
GPSHandler
:
public class GPSHandler {
private GPSThread _gpsThread;
private Coordinates _location;
private boolean _gotLocation;
private GPSListener _listener;
/** this class will be a Singleton, as the device only has one GPS system */
private static GPSHandler _instance;
/** @return the Singleton instance of the GPSHandler */
public static GPSHandler getInstance() {
if (_instance == null) {
_instance = new GPSHandler();
}
return _instance;
}
/** not publicly accessible ... use getInstance() */
private GPSHandler() {
}
/** call this to trigger a new location fix */
public void requestLocationUpdates() {
if (_gpsThread == null || !_gpsThread.isAlive()) {
_gpsThread = new GPSThread();
_gpsThread.start();
}
}
public void setListener(GPSListener listener) {
// only supports one listener this way
_listener = listener;
}
private void setLocation(final Coordinates value) {
_location = value;
if (value.getLatitude() != 0.0 || value.getLongitude() != 0.0) {
_gotLocation = true;
if (_listener != null) {
// this assumes listeners are UI listeners, and want callbacks on the UI thread:
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
_listener.onLocationReceived(value);
}
});
}
}
}
private class GPSThread extends Thread {
private void getLocationFromGoogle() {
try {
int cellID = GPRSInfo.getCellInfo().getCellId();
int lac = GPRSInfo.getCellInfo().getLAC();
String urlString2 = "http://www.google.com/glm/mmap";
// Open a connection to Google Maps API
ConnectionFactory connFact = new ConnectionFactory();
ConnectionDescriptor connDesc;
connDesc = connFact.getConnection(urlString2);
HttpConnection httpConn2;
httpConn2 = (HttpConnection)connDesc.getConnection();
httpConn2.setRequestMethod("POST");
// Write some custom data to Google Maps API
OutputStream outputStream2 = httpConn2.openOutputStream();//getOutputStream();
writeDataGoogleMaps(outputStream2, cellID, lac);
// Get the response
InputStream inputStream2 = httpConn2.openInputStream();//getInputStream();
DataInputStream dataInputStream2 = new DataInputStream(inputStream2);
// Interpret the response obtained
dataInputStream2.readShort();
dataInputStream2.readByte();
final int code = dataInputStream2.readInt();
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
Dialog.alert(code + "");
}
});
if (code == 0) {
final double latitude = dataInputStream2.readInt() / 1000000D;
final double longitude = dataInputStream2.readInt() / 1000000D;
setLocation(new Coordinates(latitude, longitude, 0.0f));
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
Dialog.alert(latitude+"-----"+longitude);
}
});
dataInputStream2.readInt();
dataInputStream2.readInt();
dataInputStream2.readUTF();
} else {
System.out.println("Error obtaining Cell Id ");
}
outputStream2.close();
inputStream2.close();
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
private void tryGetLocationFromDevice() {
_gotLocation = false;
try {
Criteria myCriteria = new Criteria();
myCriteria.setCostAllowed(false);
LocationProvider myLocationProvider = LocationProvider.getInstance(myCriteria);
try {
Location myLocation = myLocationProvider.getLocation(300);
setLocation(myLocation.getQualifiedCoordinates());
} catch ( InterruptedException iex ) {
System.out.println(iex.getMessage());
} catch ( LocationException lex ) {
System.out.println(lex.getMessage());
}
} catch ( LocationException lex ) {
System.out.println(lex.getMessage());
}
if (!_gotLocation) {
getLocationFromGoogle();
}
}
public void run() {
int bbMapsHandle = CodeModuleManager.getModuleHandle("net_rim_bb_lbs"); // OS < 6.0
int bbMapsHandle60 = CodeModuleManager.getModuleHandle("net_rim_bb_maps"); // OS 6.0+
if (bbMapsHandle > 0 || bbMapsHandle60 > 0) {
tryGetLocationFromDevice();
} else {
getLocationFromGoogle();
}
}
}
private void writeDataGoogleMaps(OutputStream out, int cellID, int lac) throws IOException {
DataOutputStream dataOutputStream = new DataOutputStream(out);
dataOutputStream.writeShort(21);
dataOutputStream.writeLong(0);
dataOutputStream.writeUTF("en");
dataOutputStream.writeUTF("Android");
dataOutputStream.writeUTF("1.0");
dataOutputStream.writeUTF("Web");
dataOutputStream.writeByte(27);
dataOutputStream.writeInt(0);
dataOutputStream.writeInt(0);
dataOutputStream.writeInt(3);
dataOutputStream.writeUTF("");
dataOutputStream.writeInt(cellID);
dataOutputStream.writeInt(lac);
dataOutputStream.writeInt(0);
dataOutputStream.writeInt(0);
dataOutputStream.writeInt(0);
dataOutputStream.writeInt(0);
dataOutputStream.flush();
}
}
关于BlackBerry 通过 GPS 或 Cell Tower 刷新位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11946774/
在我的一个 Ansible 剧本中,我使用 vmware_guest在 vCenter Server 上创建 VM 的模块。当我使用作业模板在 Ansible Tower 上运行 Playbook 并
Ansible 塔中是否有办法暂停工作流模板执行并等待用户在完成作业模板后提供某种输入,例如“批准”或“拒绝”,然后继续下一个作业模板? 我正在尝试构建一个将有 5 个作业模板的工作流,但我希望在第二
我的目录结构设置为 playbooks 目录位于 /var/lib/awx/projects/ 下角色是剧本下的符号链接(symbolic link)。 我需要角色的符号链接(symbolic lin
这是“破解编码面试”一书中的问题: 一个马戏团正在设计一个塔套路,其中的人站在彼此的塔顶上肩膀。出于实用和审美的原因,每个人都必须比他或她下面的人既矮又轻。给定马戏团中每个人的高度和体重,编写一个方法
问候大家, 我最近开始搞乱 Ansible(特别是 Ansible Tower)。 我在我的剧本中使用安全值时遇到了一个问题,更准确地说,我不明白如何正确使用它。 与 Chef-Infra 相比,您可
下面的代码解决了 hanoi 使用预定义函数 moveLOD、swapLOI 和 swapLID 返回 Action 列表的问题。 MoveLOD:将 1 个圆盘从第一个位置移动到三元组第三个位置中的
如您所知,有一些解决汉内塔的方法,但它们要求开始时所有磁盘都在一个塔中。 现在我想知道有什么办法可以解决这个问题,开始时磁盘已经随机分布在塔中。 最佳答案 是的,它仍然是可解的(假设小磁盘之上没有大磁
这是来自 Facebook 招聘样本测试的问题。 有K个钉子。当从钉子的底部到顶部看时,每个钉子可以按半径递减的顺序固定圆盘。有 N 个圆盘,半径为 1 到 N;给定钉子的初始配置和钉子的最终配置,输
尝试通过 REST API 启动工作流程并传递额外变量供剧本使用,但返回的正文显示提供的变量已放入 ignored_fields 部分。 使用 POSTMAN 和 CURL 运行模板都返回相同的结果
在 Git Tower 内部,我存储了大约 26 个文件。但是,当我尝试将存储应用回我的工作树时,我收到有关尾随空格的错误。 我怎样才能成功应用存储,绕过该错误? 完整的错误信息如下: :87: tr
我自己和同事都有相同版本的 Git Tower,当他专注于未提交的更改并点击空格键时,文件会暂存以进行提交。当我按下空格键时,什么也没有发生。那是怎么回事?我喜欢我的热键!空格键会在我的浏览器中选中复
我正在尝试使用此 python 脚本获取/创建 OAuth2 访问 token : import requests import json token_url = 'https://mytower.e
我正在 Tower 服务器中执行以下 POST: http:///api/v2/job_templates/10/launch/ Headers: Content-Type:application/j
我的讲师在测试中向我们提出了以下问题: “给出以下代码: int count=0; static void towersOfhanoi(int n, char source, char target,
我使用 Ansible Vault 来加密存储敏感数据的文件。 在我的编排脚本中,下面提到了运行剧本的命令。 ansible-playbook -i hosts -vvv Playbook.yml -
我理解递归的概念以及它如何与每次调用叠加。但我无法解释当有两个函数调用由 printf 命令分隔时,递归调用如何工作并打印。谁能向我解释一下这个递归调用是如何工作的? 我找到了一个关于名为“Tower
我想知道一种方法或方法来找到手机连接到的小区的位置(GSM one) 这是我的课: package com.example.signal; import java.io.File; import ja
这个问题在这里已经有了答案: Tower of Hanoi: Recursive Algorithm (29 个答案) 关闭 8 年前。 我是 Python 的新手,目前正在学习有关汉诺塔和递归的教
我正在我的 Mac 上试用 Tower 和 Sourcetree GUI,我有两个非常基本的问题: 这些 GUI 是安装 Git 可执行文件还是使用安装在我的 Mac 上的 Git? Git 在我的
我已经在 Mac Finder 中重新组织了我的存储库的文件夹结构,现在当我打开 Git Tower 时,它通知我无法找到这些存储库。我明白这一点,但我正在尝试弄清楚如何从应用程序内部更新存储库的位置
我是一名优秀的程序员,十分优秀!