Android:异常处理

Android:异常处理,android,exception-handling,httpwebrequest,Android,Exception Handling,Httpwebrequest,我的android应用程序尝试使用 response = client.execute(getRequest); 但是,服务器可能会关闭,在这种情况下,我想抛出一个自定义的异常,并显示一条自定义消息,而不是android提供的消息,表示应用程序意外关闭 有什么方法可以做到这一点吗?您可以尝试将调用包装在try-catch块中,捕获通用异常类型,然后处理它(查看服务器是否关闭),然后抛出自定义异常 try { response = client.execute(getRequest);

我的android应用程序尝试使用

 response = client.execute(getRequest);
但是,服务器可能会关闭,在这种情况下,我想抛出一个自定义的
异常
,并显示一条自定义消息,而不是android提供的消息,表示应用程序意外关闭


有什么方法可以做到这一点吗?

您可以尝试将调用包装在try-catch块中,捕获通用异常类型,然后处理它(查看服务器是否关闭),然后抛出自定义异常

try
{
   response = client.execute(getRequest);
}
catch(Exception e)
{
   //processing
   throw new MyCustomException();
}

编写您自己的类
MyException扩展异常{…
,并为其提供一些自定义实现。这些实现可以在该类的构造函数中,也可以在某些方法中

然后像扔一样扔-

try{
   response = client.execute(getRequest);
}catch(Exception e){
   //handle your exception
   throw new MyException();
}

您能否在异常块中打印
e.printstacktrace();


我认为您将在那里获得有关您所获得的异常类型的详细信息。

如果您还希望向用户显示此自定义消息,您可以通过以下方式执行此操作:

try {
   response = client.execute(getRequest);
} catch(Exception e) {
   Toast.makeText(getApplicationContext(), "My custom message", Toast.LENGTH_LONG).show();
   throw new Exception("My custom message", e);
}

我用ACRA解决了这个问题

您可以覆盖默认的崩溃报告,并使用

@ReportsCrashes(formKey="dGVacG0ydVHnaNHjRjVTUTEtb3FPWGc6MQ",
            mode = ReportingInteractionMode.TOAST,
            forceCloseDialogAfterToast = false, // optional, default false
            resToastText = R.string.crash_toast_text)

感谢您的及时回复,我实际上正在使用一个try-catch块try{//execute-request-response=client.execute(getRequest);}catch(ClientProtocolException e){Log.e(“ClientProtocolException”,e.toString();}catch(IOException e){Log.e(“IO exception”,e.toString());抛出新运行时异常(“错误”);}然而,它仍然给我一个通知,说应用程序意外关闭了。你是否处理上次捕获时抛出的RuntimeException?当出现未捕获的异常时,你的应用程序将崩溃。问题是,当它引用的服务关闭时,我的应用程序将不可避免地崩溃。我想做的是显示消息的ead-应用程序意外失败并崩溃…显示一条消息,说明服务器已关闭,请稍后重试,并允许应用程序在不显示默认错误消息的情况下崩溃问题是,当它所引用的服务关闭时,我的应用程序将不可避免地崩溃。我要做的不是显示正在放置消息-应用程序意外失败并崩溃…显示一条消息,说明服务器已关闭,请稍后重试,并允许应用程序在不显示默认错误消息的情况下崩溃
@ReportsCrashes(formKey="dGVacG0ydVHnaNHjRjVTUTEtb3FPWGc6MQ",
            mode = ReportingInteractionMode.TOAST,
            forceCloseDialogAfterToast = false, // optional, default false
            resToastText = R.string.crash_toast_text)