Java 如何通过在android中启动新活动来处理IOException

Java 如何通过在android中启动新活动来处理IOException,java,android,android-activity,ioexception,Java,Android,Android Activity,Ioexception,我试图在抛出异常时启动主页面活动。现在,当异常发生时,应用程序将关闭并从主页启动。我想让它无缝地转到主页应用程序,而不是让用户担心应用程序正在关闭。它给我的错误是: D/Issue with Http:: IOException 04-19 13:57:31.518 27520-27570/myapp W/System.err: java.io.FileNotFoundException: my webpage 04-19 13:57:31.518 27520-27570/myapp W/Sys

我试图在抛出异常时启动主页面活动。现在,当异常发生时,应用程序将关闭并从主页启动。我想让它无缝地转到主页应用程序,而不是让用户担心应用程序正在关闭。它给我的错误是:

D/Issue with Http:: IOException
04-19 13:57:31.518 27520-27570/myapp W/System.err: java.io.FileNotFoundException: my webpage
04-19 13:57:31.518 27520-27570/myapp W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:238)
04-19 13:57:31.518 27520-27570/myapp W/System.err:     at myapp.HttpManager.MyHttpGet.httpDownloadData(MyHttpGet.java:79)
04-19 13:57:31.518 27520-27570/myapp W/System.err:     at myapp.HttpManager.MyHttpGet.doInBackground(MyHttpGet.java:53)
04-19 13:57:31.518 27520-27570/myapp W/System.err:     at myapp.HttpManager.MyHttpGet.doInBackground(MyHttpGet.java:31)
04-19 13:57:31.518 27520-27570/myapp W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:295)
04-19 13:57:31.518 27520-27570/myapp W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
04-19 13:57:31.519 27520-27570/myapp W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
04-19 13:57:31.519 27520-27570/myapp W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
04-19 13:57:31.519 27520-27570/myapp W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
04-19 13:57:31.519 27520-27570/myapp W/System.err:     at java.lang.Thread.run(Thread.java:818)
04-19 13:57:31.538 27520-27520/myapp D/AndroidRuntime: Shutting down VM
04-19 13:57:31.594 27520-27520/myapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: myapp, PID: 27520
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.contains(java.lang.CharSequence)' on a null object reference
at myapp.JSON.LoginJsonParser.checkUsername(LoginJsonParser.java:41)
at myapp.LoginPage$2.onClick(LoginPage.java:128)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
这对dev来说很好,但我想在这种情况发生时开始一项新的活动。对于这个问题,我的代码是这样的

 private String httpDownloadData(String myUrl)

{
    String respone = null;
    HttpURLConnection urlConnection = null;
    try
    {
        URL url = new URL(myUrl);
        //put in the username and pssword for parmas to send to url
        //this is good for login
        if (username!=null)
        {
            Authenticator.setDefault(new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(username, password.toCharArray());
                }
            });
        }

        urlConnection = (HttpURLConnection)url.openConnection();
        InputStream inputStream = urlConnection.getInputStream();

        if(inputStream != null)
        {
            respone = streamToString(inputStream);
            inputStream.close();
        }

    }catch (IOException ie)
    {
        //ie.printStackTrace();
        Log.d("Issue with Http: " , "IOException");
        ie.printStackTrace();
        Intent newIntent = new Intent(activity.getApplicationContext(), ECom.class);
        activity.startActivity(newIntent);
    }finally {
        if(urlConnection != null)
        {
            urlConnection.disconnect();
        }
    }
    return respone;
}

谢谢您的帮助。

您不能在UI线程中执行任何网络操作,它将给您networkOnMainThreadException。请使用AsyncTask执行网络和长时间运行的操作。你可以找到


或者使用框架来处理网络操作

您不能在UI线程中执行任何网络操作,它将给您networkOnMainThreadException。请使用AsyncTask执行网络和长时间运行的操作。你可以找到


或者使用一个框架来处理网络操作

您在catch中只处理IOException,在这种情况下,它可能会抛出其他异常,在这种情况下它将崩溃。正如我在NPE的日志中所看到的那样,更好的方法是确保您的代码可以通过其他异常,或者使用基本异常类来解决所有问题例外情况

您只处理catch中的IOException,可能会抛出其他异常,在这种情况下,它会崩溃。正如我在NPE日志中看到的那样,更好的方法是确保您的代码可以通过其他异常,或者使用基本异常类来处理所有异常

您必须在新线程中执行网络操作,或者使用框架,例如Volley,Okhhttp。改型是我现在使用的最好的框架,它包含Okhttp和AsyncTask,但是您可能希望联合RxJava。

您必须在新线程中执行网络操作,或者使用框架,例如Volley,改型是我现在使用的最好的框架,它包含了Okhttp和AsyncTask,但是你可能想把RxJava统一起来。

根据你的日志详细信息,你的应用程序抛出的不仅仅是IOException。您是否尝试在catch块中捕获Exception而不是IOException?也可以使用catch for NullPointerException,也可以使用Exception@VivekMishra很好,我想在它到达我的jsonparser之前阻止它,但后来我意识到我的json解析器可以启动一个活动,所以它现在可以正常工作了。谢谢您使用。包含在代码中的某个地方。请发布该代码块。根据您的日志详细信息,您的应用程序引发的IOException不止一个。您是否尝试在catch块中捕获Exception而不是IOException?也可以使用catch for NullPointerException,也可以使用Exception@VivekMishra很好,我想在它到达我的jsonparser之前阻止它,但后来我意识到我的json解析器可以启动一个活动,所以它现在可以正常工作了。谢谢您使用。包含在代码中的某个地方。请在一个异步任务上发布代码块。good point及其用于从我的服务器下载数据。good point及其用于从我的服务器下载数据的异步任务。