2

我想将位置坐标(纬度,经度)存储在我的 MySQL DB 中的表中,以类似于以下方式查询 url:http://locationstore.com/postlocation.php ? latitude=var1&longitude=var2每十秒。PHP 脚本就像一个魅力。在设备中获取坐标也不是问题。但是向服务器发出请求是一件困难的事。我的代码是这样的:

public class LocationHTTPSender extends Thread {
    for (;;) {
        try { 
            //fetch latest coordinates
            coords = this.coords();
            //reset url
            this.url="http://locationstore.com/postlocation.php";
            //              create uri
            uri = URI.create(this.url);

            FireAndForgetDestination ffd = null;

            ffd = (FireAndForgetDestination) DestinationFactory.getSenderDestination
                    ("MyContext", uri);
            if(ffd == null)
            {
                ffd = DestinationFactory.createFireAndForgetDestination
                                  (new Context("MyContext"), uri);
            }

            ByteMessage myMsg = ffd.createByteMessage();
            myMsg.setStringPayload("doesnt matter");
            ((HttpMessage) myMsg).setMethod(HttpMessage.POST);

            ((HttpMessage) myMsg).setQueryParam("latitude", coords[0]);
            ((HttpMessage) myMsg).setQueryParam("longitude", coords[1]);
            ((HttpMessage) myMsg).setQueryParam("user", "1");
            int i = ffd.sendNoResponse(myMsg);


            ffd.destroy();
            System.out.println("Lets sleep for a while..");
            Thread.sleep(10000);
            System.out.println("woke up");

        } catch (Exception e) {
            // TODO Auto-generated catch block
            System.out.println("Exception message: " + e.toString());
            e.printStackTrace();
        }       
}
4

2 回答 2

1

我没有运行这段代码来测试它,但我会怀疑这个调​​用:

        ffd.destroy();

根据 API 文档:

关闭目的地。此方法取消所有未完成的消息,丢弃对这些消息的所有响应(如果有),暂停所有传入消息的传递,并阻止将来接收此目标的任何消息。此方法还销毁任何可持久的出站和入站队列。如果 Destination 使用 Push API,此方法将注销关联的推送订阅。仅应在删除应用程序期间调用此方法。

因此,如果您看到第一个请求成功(至少有时),而后续请求失败,我会尝试删除对destroy().

请参阅此处的 BlackBerry 文档示例

于 2012-09-24T06:21:38.877 回答
1

好的,所以我终于让它愉快地运行了。问题在于交通选择;尽管此示例在我的设备中将 WAP2(以及其他)作为可用传输提供,但运行网络诊断工具仅显示 BIS 可用。它还为我提供了需要在 URL 末尾附加的连接参数 (;deviceside=false;ConnectionUID=GPMDSEU01;ConnectionType=mds-public)。代码最终是这样的:

for (;;) {
        try {


            coords.refreshCoordinates();

            this.defaultUrl();
            this.setUrl(stringFuncs.replaceAll(this.getUrl(), "%latitude%", coords.getLatitude() + ""));
            this.setUrl(stringFuncs.replaceAll(this.getUrl(), "%longitude%", coords.getLongitude() + ""));


            cd = cf.getConnection(this.getUrl());

            if (cd != null) {

                try {

                    HttpConnection hc = (HttpConnection)cd.getConnection();
                    final int i = hc.getResponseCode();
                    hc.close();

                } catch (Exception e) {

                }

            }               



            //dormir
            Thread.sleep(15000);
        } catch (Exception e) {

        } finally {

            //cerrar conexiones

            //poner objetos a null
        }

感谢您的帮助@Nate,非常感谢。

于 2012-09-25T10:56:58.087 回答