【问题标题】:JSON parsing on 3g results in connection refused3g 上的 JSON 解析导致连接被拒绝
【发布时间】:2013-03-08 02:17:21
【问题描述】:

我遇到了这个问题,导致我把头撞在墙上。我正在编写一个报纸应用程序,它从数据库中解析 JSON 格式的数据并显示它。该应用程序运行良好,可以在 WiFi 和 4G 上传输数据,但在 3G 上会卡住。大多数情况下,在 3G 上抓取数据需要 30 秒到 1 分钟,而在 WiFi 上只需 1 到 2 秒。我经常收到一条警告消息,指出:HttpHostConnectException:连接被拒绝。我知道该站点运行良好并且不会引起问题,因为我可以在 WiFi 和 4G 上正常查询,并且从桌面导航也没有问题。作为另一个测试,我借了我的同事MiFi,它在我们地区只有3G,并将我的设备连接到它,它可以很好地传递数据,虽然它只是3G回到互联网。所以在看了这个,并试图找到一个解决方案之后,我得出的结论是,也许我没有做正确的事情。据我所知,一切都很好,但我不是专家。对此的任何见解将不胜感激。

总结--

  • 4G = 工作
  • WiFi = 工作
  • 3G = 极慢
  • 通过 WiFi 的 3G(3G 上的 MiFi)=Works

    public JSONObject makeHttpRequest(String url, String method, List params) {

    // Making HTTP request
    try {
    
         if(method == "GET"){
            // request method is GET
            DefaultHttpClient httpClient = new DefaultHttpClient();
            String paramString = URLEncodedUtils.format(params, "utf-8");
            url += "?" + paramString;
            HttpGet httpGet = new HttpGet(url);
            HttpResponse httpResponse = httpClient.execute(httpGet);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();
            System.out.println("---GET--- Now grabing GET DATA");
        }           
    
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        json = sb.toString();
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }
    
    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }
    
    // return JSON String
    return jObj;
    

    }

【问题讨论】:

    标签: android json wifi 3g 4g


    【解决方案1】:

    我的 MiFi 上的 3G 是否同样慢?否则,听起来您是在说您的进程在连接速度较慢的地方失败。

    您提到 3G 需要 > 30 秒。你在应用引擎上运行吗? GAE 对交易需要多长时间有一个硬性限制——我认为这个限制是 30 秒。

    如果你在你的服务器上添加了一个延迟,这样即使是 Wifi 请求也需要与现在 3G 测试一样长的时间 - 以验证是导致失败的时间。

    另外,我认为那些 3G 的结果听起来相当糟糕。我不知道您要检索多少数据,但听起来确实不需要那么长时间。因此,也许您的 3G 连接只是质量较差的连接(而 MiFi 可能是更好的 3G 连接)。

    【讨论】:

    • MiFi 以 -69 dbm 连接到塔,并且仅在 3G 上,但可以正常传输数据。因此,与手机相比,MiFi 的速度同样慢。我试过平板电脑和手机,也遇到了同样的问题。这是通过pastebin.com/2PPRpkdw 的平均数据量。
    • 3G 上 30 秒,否则约 2 秒 - 发生了一些奇怪的事情。我从 Android 向 GAE 服务器发出 JSON HTTP 请求,它们在 3G 上总是在
    • 我无法访问网络服务器,因为它由一家报纸公司管理,但我确实设置了一个相同的数据库进行测试。当我连接到测试服务器时,它工作得很好,但似乎只有在连接到实时数据库时,我才会遇到问题(仅限 3G。WiFi 工作得很好)。到目前为止,我已经在三台设备上进行了测试,但仍然迷路。这有点指向我书中的服务器问题,但在我开始打电话和向报业公司提问之前,我想确保这不是我的结局。
    • 您的客户能否提出其他请求,例如在正常往返时间的 3G 上 ping Google?
    • 是的,除了这个应用程序之外,其他一切似乎都运行良好。即使我通过网络浏览器,页面在 3G 上也能在几秒钟内加载,而不是通过我的应用程序。
    猜你喜欢
    • 2016-11-13
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多