【问题标题】:After catching exception ,the emulator still shows "Application has stopped unexpectedly "捕获异常后,模拟器仍然显示“应用程序已意外停止”
【发布时间】:2011-12-02 04:46:51
【问题描述】:
private InputStream getISFromURL(String url) {
  //post
  InputStream is=null;
  try {
    HttpParams params=new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(params, 3000);
    HttpConnectionParams.setSoTimeout(params, 3000);
    HttpClient httpClient=new DefaultHttpClient(params);
    HttpPost httpPost=new HttpPost(url);
    HttpResponse httpResponce=httpClient.execute(httpPost);
    HttpEntity httpEntity=httpResponce.getEntity();
    is=httpEntity.getContent();
  } catch (Exception e) {
    this.context.startActivity(new Intent(this.context, Splash.class));
    Log.d("imsoft", "getJSONdataFromURL ="+e.toString());
  }
  return is;
}

如果 Internet 连接处于活动状态,则此代码运行良好,但是当我断开我的系统(它也断开仿真器)时,此方法会引发 UnknownHostException,并通过打开我的 Splash.java(启动画面)将其捕获在 catch 块中,但在同时它也给我“应用程序已意外停止,请重试”。

所以请给我答案或可以帮助我的建议。

【问题讨论】:

  • 也许就在之后(在异常的情况下返回 null,也许这会导致之后的 NullPointerException)。尝试在 shell 中键入 adb logcat 以查看发生了什么以及发生在哪里。
  • 谢谢您,先生,您的这一点“在异常情况下将返回 null”对我帮助很大。它确实返回了导致此错误的 null 输入流。再次感谢您非常非常。先生您还没有回答,我可以接受您的回答。请以有用的方式回答它,这也将对其他人有所帮助。
  • 转发了我的评论作为答案。谢谢。

标签: java android exception android-emulator try-catch


【解决方案1】:

根据您的要求,这是我在更正式的回答中的评论:

也许您的问题是由于您在异常情况下返回 null 造成的。

如果调用者在引用它之前未能检查您的方法结果是否不为空,则调用者可能会抛出 NullPointerException。

尝试在 shell 中键入 adb logcat 以查看发生了什么以及发生在哪里。

【讨论】:

    【解决方案2】:

    我认为它正在抛出异常,因为在 catch 块之后,它会来到这条语句 return is;,如果代码抛出异常,则认为它是 null。

    【讨论】:

    • 非常感谢,先生,您的观点与 Laurent 所说的相同。我已经评论了他,如果他不回答我会接受您的回答。谢谢。
    【解决方案3】:

    你可以使用这个功能:

    public static boolean isOnline(Context mContext) {
        ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getActiveNetworkInfo();
        if (netInfo != null && netInfo.isConnectedOrConnecting())
            return true;
        else
            return false;
    }
    

    控制您是否在线。您必须添加权限才能执行此操作:

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    

    【讨论】:

    • 我试过了,但在我的情况下它总是返回 true,因为我正在检查模拟器。我不知道它是否适用于真正的 android 设备。谢谢
    猜你喜欢
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    相关资源
    最近更新 更多