【问题标题】:Internet data connection fails互联网数据连接失败
【发布时间】:2012-04-23 10:25:35
【问题描述】:

我的用户报告说,当他们使用 WiFi 下载 JSON 文件时,该应用程序的工作原理很像,但是当他们尝试使用他们的数据连接下载相同的文件时:GPRS、3G、3.5G 等......应用程序的力量关闭。并非所有类型的智能手机都会发生这种情况,例如,我的 LG Optimus Black 不会发生这种情况。

为了检索这个文件,我使用了 AsyncTask。

private class GetData extends AsyncTask<Void, Void, Void> {
        protected Void doInBackground(Void... args) {

            DefaultHttpClient httpclient = new DefaultHttpClient();
            try {

                HttpGet httpget = new HttpGet("http://url.com);
                HttpResponse response = httpclient.execute(httpget);
                strPlayers = inputStreamToString(response.getEntity().getContent()).toString();
            }
            catch (IOException e) { e.printStackTrace(); } 
            finally { httpclient.getConnectionManager().shutdown(); }

           return null;
        }

        protected void onPostExecute(Void result) {

            Players players = new Gson().fromJson(strPlayers, Players.class);

            quantity_darkmatter.setText(String.valueOf(players.userName));

        }
    }

这里是 StackTrace()

java.lang.RuntimeException: Unable to start activity ComponentInfo{carl.fri.fer.omegan/carl.fri.fer.omegan.Research}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1659)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675)
at android.app.ActivityThread.access$1500(ActivityThread.java:121)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3701)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at carl.fri.fer.omegan.Research.onStart(Research.java:613)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129)
at android.app.Activity.performStart(Activity.java:3791)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1632)
... 11 more

可能是什么问题?

【问题讨论】:

  • 好吧,某处有一个空指针,Research.java:613 中发生了什么?

标签: http connection gson wifi


【解决方案1】:

对于非WIFI,连接可能需要更多时间,因此可能是连接超时的问题,发生这种情况时 strPlayers 将为空白,并且由于 onPostExecute 中没有错误处理,这可能会给 Gson.fromJson 打嗝并成功抛出异常...在尝试解析它之前尝试测试 strPlayers!=null 或将其放入 try-catch 块中以查看它是否抛出某种异常。

doInBackground 函数中是否有 e.printStackTrace() 的输出?

【讨论】:

  • hmm... 默认情况下 DefaultHttpClient 具有无限超时,因此这可能是您的应用挂起的原因,您可能需要尝试设置超时以查看连接是否超时(您将收到一条错误消息,该消息将被 printStackTrace()'ed...为什么 httpclient 无法连接到服务器是一个不同的问题...也许它与 apache 的 defaulthttpclient 没有用于高手机上的使用有关延迟连接?
  • 你可能想看看这个:stackoverflow.com/questions/6705170/…
  • 我已经使用 stackTrace 编辑了我的帖子。我去看看链接!谢谢!
  • 我认为如果我添加超时会有问题,因为使用WiFi,文件几乎立即下载,但使用GPRS,连接有时需要30多秒,因为它必须也下载一些图片...
  • 只设置 tcp 超时,而不是套接字超时(或至少将套接字超时设置为较大的值,如 60s)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-12
  • 2010-12-16
  • 1970-01-01
  • 2015-06-03
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多