1

渡された uri 文字列で接続を確立しようとしているバックグラウンド スレッドが、IOExceptionまたはMalformedURLException. スローされたすべての例外をキャッチし、メッセージを logcat に出力しますが、アプリが msg: と一緒にクラッシュすることは望ましくありませんUnfortunately, MyApp has stopped。メイン/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());

    }
}
}

この場合、入力された文字列が prasable url でないか、接続できない場合、アプリがクラッシュします。しかし、UI スレッドに有用なメッセージを投稿して、アプリのクラッシュを防止できるようにしたいと考えています。

ありがとうございました。

4

3 に答える 3

1

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.
}
于 2013-09-28T19:51:36.843 に答える
1

次にキャッチ部分に入れます

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);
                }
            }
于 2013-09-28T19:16:54.880 に答える
1

Thread.run() の代わりに Thread.start() を間違って使用しています:

          new Thread(new MyDownloaderClass(url_str)).start();

コードは元のスレッドで引き続き実行されるため、例外が発生するとクラッシュが発生します。

于 2014-01-06T13:32:18.663 に答える