当前位置: 首页 > 面试题库 >

从黑莓手机应用程序发送JSON请求

裴楚青
2023-03-14
问题内容

我如何从充当客户端的黑莓应用程序向服务器发送JSON请求,以从服务器获取信息以在BB应用程序中使用它们,我在Windows 7下使用黑莓Eclipse

我尝试此代码

public void loginRequest() throws IOException, JSONException{
    HttpConnection c = null;
    InputStream is = null;
    int rc;

    JSONObject postObject = new JSONObject();
    postObject.put("method", method);
    //postObject.put("params", Parameters);

    try{
        c = (HttpConnection)Connector.open(urlPath);

        // Set the request method and headers
        c.setRequestMethod(HttpConnection.GET);
        c.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
        c.setRequestProperty("Content-Length", "" + (postObject.toString().length() - 2));
        c.setRequestProperty("method", "GET");

        // Getting the response code will open the connection,
        // send the request, and read the HTTP response headers.
        // The headers are stored until requested.
        rc = c.getResponseCode();
        if (rc != HttpConnection.HTTP_OK){
            throw new IOException("HTTP response code: " + rc);
        }

        is = c.openInputStream();

        // Get the length and process the data
        int len = (int)c.getLength();
        if (len > 0){
             int actual = 0;
             int bytesread = 0 ;
             byte[] data = new byte[len];
             while ((bytesread != len) && (actual != -1)){
                actual = is.read(data, bytesread, len - bytesread);
                bytesread += actual;
             }
             //Get the JSON String
            System.out.println(new String(data));
        }
        else{
            int ch;
            while ((ch = is.read()) != -1){
                //TODO
                /*
                process((byte)ch);
                */
            }
        }
    }catch (ClassCastException e){
        throw new IllegalArgumentException("Not an HTTP URL");
    }finally {
        if (is != null)
            is.close();
        if (c != null)
            c.close();
    }
   }

我在线程中通过run方法调用此方法

当模拟器到达( rc = c.getResponseCode(); )时,运行代码停止

我调试代码,并在到达此语句并出现此错误时停止

本地连接在〜120000后超时

任何帮助


问题答案:

在模拟器中运行应用程序时,请确保在Eclipse的“运行配置”或“调试配置”->“模拟器选项卡”->“常规选项卡”中启用了 带有模拟器
启动移动数据系统连接服务(MDS-CS)

如果未启用,则应检查本指南“ 使用BlackBerry Smartphone Simulator

测试BlackBerry设备应用程序
”,尤其是“ 使用HTTP连接测试BlackBerry设备应用程序 ”部分。简而言之,您必须启用MDS-
CS。启用它之后,您应该重新启动模拟器。以下是本指南的引文:

启动BlackBerry Smartphone Simulator时,启动BlackBerry MDS Connection Service。

  1. 在Eclipse®中,在“运行”菜单上,单击“调试配置”或“运行配置”。
  2. 展开BlackBerry Simulator项目。
  3. 完成以下任务之一:
    • 要使用现有的启动配置,请在BlackBerry Simulator下,单击启动配置。
    • 要创建新的启动配置,请右键单击BlackBerry Simulator,然后选择“新建”。
  4. 单击模拟器选项卡。
  5. 单击常规选项卡。
  6. 选中使用模拟器启动移动数据系统连接服务(MDS-CS)复选框。
  7. 单击应用。

编辑
或者,在使用模拟器时,您可以将;deviceside=true后缀添加到传递给的URL Connector.open()。通过设置
deviceside = true, 您指定应直接从手持设备(在您的情况下为模拟器)打开基础TCP连接,因此将不使用BlackBerry MDS
Connection Service。这是一个基于您的代码的代码片段:

if (DeviceInfo.isSimulator()) {
    urlPath += ";deviceside=true";
} else {
    urlPath += connectionDependentSuffix; // suffix that is relevant to
                                          // the desired connection option
}
c = (HttpConnection)Connector.open(urlPath);

希望这可以帮助。



 类似资料:
  • 我正在使用Volley从我的android应用程序向运行在http://192.168.1.4:3000/Battery_Signal_Report中的本地服务器发送一个带有参数的http post请求。我很确定服务器运行正常(我用Postman成功地检查了它)。 此外,我使用ip 10.0.2.2成功地通过Android Studio的模拟器发送了请求 为了使它正常工作,我使用了各种请求实现,包

  • 问题内容: 我正在从perl / cgi程序编写JSON响应。标头的内容类型必须为“ application / json”。但这似乎并未被识别为响应是作为文本文件抛出的。 我将使用jQuery的JSON库捕获响应。在发送JSON响应时我缺少什么地方。 问题答案: 我在perl / cgi程序中执行此操作。 我在代码的顶部使用了这些: 然后我打印json标头: 这是以下内容的类型: 然后我像这样打

  • 问题内容: 我正在使用似乎成功的jQuery 执行-request。但是如何在服务器端使用它并修改响应? 我是否需要另一个Servlet,因为Faces Servlet并非旨在解决这个问题? 它用于以下过程: 用户输入调用JS的地址和点击 JS使用Google地图检索地理数据并将其发送到服务器(我正在考虑将其用于上述代码) 服务器响应从数据库发送一些接近的位置 JS再次使用Google地图检索精确

  • 问题内容: 我正在使用下面的代码发送http POST请求,该请求将对象发送到WCF服务。可以,但是如果我的WCF服务还需要其他参数怎么办?如何从Android客户端发送它们? 这是我到目前为止编写的代码: 问题答案: 使用POST发布参数: 你错过的部分在以下内容中,即如下。 其余的事情你都可以做到。

  • 在开发中,当我在localhost:3000上运行react服务器时。我使用Package.json中的proxy为后端服务器设置了baseurl,后端服务器运行在loacalhost:5000上。所以我只是将package.json中的proxy编辑为“localhost:5000”。因此从axios发送的所有api请求都将被定向到该URL。 与上述相同的请求将重定向到: 在生产过程中,当我在h

  • 我不确定我遇到的问题是概念问题还是技术问题,因为配置错误。 目标是在应用程序容器中托管的Java EE应用程序(特别是WildFly)和独立运行的Java SE应用程序之间发送双向消息,都使用标准JMS协议和主题。我认为这应该是可能的,只要他们都使用相同的经纪人和相同的主题。 因此,我有一个外部 Artemis 实例作为消息代理运行,并在 Java EE 应用程序的单独 Bean 中成功设置了生产