如何防止android应用程序因后台线程中的IOException而崩溃?
我想知道是否有一种方法可以防止试图在传递的uri字符串上建立连接的后台线程由于如何防止android应用程序因后台线程中的IOException而崩溃?,android,multithreading,Android,Multithreading,我想知道是否有一种方法可以防止试图在传递的uri字符串上建立连接的后台线程由于IOException或MalformedURLException而导致整个应用程序崩溃。 当我捕获抛出的所有异常并将消息打印到logcat时,我不希望应用程序与消息一起崩溃:不幸的是,MyApp已经停止了。 我希望通过在主/UI线程上发布相关的错误消息,让应用程序优雅地退出 比如说: public void onClick(View v){ new Thread(new MyDownloaderClass(u
IOException
或MalformedURLException
而导致整个应用程序崩溃。
当我捕获抛出的所有异常并将消息打印到logcat时,我不希望应用程序与消息一起崩溃:不幸的是,MyApp已经停止了
。
我希望通过在主/UI线程上发布相关的错误消息,让应用程序优雅地退出
比如说:
public void onClick(View v){
new Thread(new MyDownloaderClass(url_str)).start();
}
private class MyDownloaderClass implements Runnable{
private String url_str;
public MyDownloaderClass(String arg){url_str=arg;}
public void run(){
URL url=null;
int respCode=0;
try{
url=new URL(str);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setRequestMethod("HEAD");
connection.connect();
respCode=connection.getResponseCode();
}catch(MalformedURLException e){
Log.e(TAG,e.getClass()+": "+e.getMessage());
}catch(IOException e){
Log.e(TAG,e.getClass()+": "+e.getMessage());
}
}
}
在这种情况下,如果输入的字符串不是可使用的url或无法建立连接,我的应用程序就会崩溃。但我希望能够在UI线程上发布一些有用的消息,防止应用程序崩溃
多谢各位 然后把它放在锁扣部分
catch (Exception e) {
if(e.getMessage().toString().equalsIgnoreCase("write your exception from logcat"))
{
//show your error in a toast or a dialog
Toast.makeText(this," your pertinent error message ", Toast.LENGTH_LONG);
}
}
我建议您在AsyncTask中执行所有网络操作 在AsyncTask方法的doinBackground()中,使用try/catch执行所有网络操作。如下所示处理异常
//Define "Exception error = null;" in your AsyncTask class.
catch(Exception ex) {
Log.e(TAG,e.getClass()+": "+ex.getMessage());
error = ex;
}
在onPostExecute()方法中检查
if (error ! = null) {
//Toast msg . // You should not call a Toast msg in your doinBackground method.
}
您错误地使用了Thread.start()而不是Thread.run():
您的代码仍然在原始线程上运行,因此会出现导致崩溃的异常。Logcat中的错误跟踪中显示了什么?因此,如果用户输入了一些乱七八糟的url并单击按钮,那么我会得到09-28 15:05:29.262:E/MyApp Activity(2940):class java.net.MalformedURLException:Protocol not found:然后应用程序崩溃。我想用一种方式来处理这个问题,即要求用户通过在主线程上发布消息来检查输入的url。因为它是一个后台线程,所以我使用runOnUiThread方法在主线程上创建一个toast来通知用户错误的输入。但是应用程序只是在捕捉到异常时崩溃,并且没有在UIhi pushkar上创建toast,谢谢您的回复。我想知道如何在不使用异步任务的情况下完成它。
new Thread(new MyDownloaderClass(url_str)).start();