前言我改变了标题。很难理解为什么在调试时,有时未捕获的异常会向Logcat打印'FATAL EXCEPTION',有时它们不会。
当我到达client1.getInputStream()
行时,下面的简化示例崩溃了。 Logcat内部没有堆栈跟踪或其他指示,表明出了什么问题。我正在运行Android Studio 3.0.0beta4。
更新
好吧,我弄清楚它崩溃的原因。我添加catch(Exception ex) {...}
并发现实际上抛出异常,因为我忘了测试它。愚蠢的错误,我没有在清单中包含INTERNET权限。
所以,我仍然想知道为什么我没有得到unhandle异常的错误指示。该应用程序只是悄然消失。
编辑一位评论者说
在java中,未打印未处理的异常
当我强制执行未处理的NullPointerException
时,这是logcat消息FATAL EXCEPTION: Thread-6729
Process: com.example.myapplication, PID: 30824
java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.InputStream java.net.URLConnection.getInputStream()' on a null object reference
at com.example.myapplication.MainActivity.GetDataAsyncFromPlaystore(MainActivity.java:79)
at com.example.myapplication.MainActivity$1$1.run(MainActivity.java:42)
at java.lang.Thread.run(Thread.java:818)
那么,为什么不为SecurityException?
Edit2 为了让事情更加混乱,我发现当我在异常点之前设置一个断点时,然后逐步执行代码并跨过违规行(导致该行安全异常),应用程序突然终止,没有任何迹象表明原因。但是,如果我在到达违规行之前按F9,我确实会在Logcat中记录“FATAL EXCEPTION”消息。 (因此,我已将“android-studio”标签添加回问题。)
所以,同样的问题,措辞略有不同:为什么异常在调试单向时打印'FATAL EXCEPTION'消息,而不是另一种?
(简化)代码
public void GetDataFromWebsite()
{
Uri queryUri = Uri.parse("https://play.google.com/store/search?q=Planning&c=apps");
try {
URL queryUrl = new URL(queryUri.toString());
URLConnection client1 = queryUrl.openConnection();
InputStream in = client1.getInputStream();
Log.d("Test", "Okay");
} catch (MalformedURLException muex) {
Log.e("Test", "Malformed Url", muex);
} catch (IOException ioex) {
Log.e("Test", "IO Error", ioex);
// } catch(Exception ex) {
// Log.e("Test","Other Exception", ex);
}
}
注意:
答案 0 :(得分:1)
您只是抓住了MalformedURLException
和IOException
。所以你不会得到其他例外。
赶上例外,你会得到一个痕迹。
UnHandled异常未在android log cat中打印。您可以按UncaughtExceptionHandler
打印UnHandled异常。以下是实施UncaughtExceptionHandler
:AddIns2
NullpointerException
和SecurityException
之间没有相关性。如何被SecurityException
抓住。