在Android中捕获异常

时间:2019-04-02 14:31:19

标签: java android

调用方法后,我在Android Studio中收到错误消息。我更想知道错误是否是我所认为的。 该错误在关闭并给出致命异常后首先告诉您意外的响应代码500。

我一直在尝试从致命异常中获取异常,但是没有运气。据我了解,我无法捕获到意外的响应代码500。

错误

D/NetworkSecurityConfig: No Network Security Config specified, using platform default
E/Volley: [1668] BasicNetwork.performRequest: Unexpected response code 500 for (website)
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.geotask, PID: 14594
    java.lang.IllegalStateException
        at com.example.geotask.PSHandler$1.onErrorResponse(PSHandler.java:48)
        at com.android.volley.Request.deliverError(Request.java:617)
        at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:104)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Application terminated.

给出错误的代码

try {
    psHandler.addNewUser(name, LoginActivity.this, new RetrievedCallback<Void>() {
        @Override
        public void execute(Void input) {
            Intent intent;
            intent = new Intent(LoginActivity.this, MainActivity.class);
            Toast.makeText(LoginActivity.this, "New account created", Toast.LENGTH_SHORT).show();
            startActivity(intent);
            finish();
        }
    });
} catch (IllegalStateException e) {
}

我删除了它所指的网站。如您所见,我正在尝试捕获logcat中给出的可能错误,但是我不确定是否有能力。 我想知道我是否能够防止logcat出现错误。

4 个答案:

答案 0 :(得分:4)

之所以无法捕获该异常,是因为您试图在实际发生的方法之外捕获该异常:

try {
    psHandler.addNewUser(name, LoginActivity.this, new RetrievedCallback<Void>() {
        @Override
        public void execute(Void input) {
            throw new IllegalStateException();
        }
    });
} catch (IllegalStateException e) {
    // This line will never be reached because the exception 
    // is not thrown here, but inside the callback method
}

相反,您应该在回调方法内添加try/catch

psHandler.addNewUser(name, LoginActivity.this, new RetrievedCallback<Void>() {
    @Override
    public void execute(Void input) {
        try {
            throw new IllegalStateException();
        } catch (IllegalStateException e) {
            // This line will be reached
        }
    }
});

答案 1 :(得分:1)

首先,您的try catch不执行任何操作,您需要执行以下操作,例外情况如下。

 try {
    } catch (Exception e) {
   Exception
     System.out.println("Error " + e.getMessage());
     return null;
}

第二点已经指出,您的错误似乎是在另一点抛出的,应该对此进行调查。

答案 2 :(得分:1)

尝试在execute()内捕获异常

psHandler.addNewUser(name, LoginActivity.this, new RetrievedCallback<Void>() {
                @Override
                public void execute(Void input) {
                   try {
                       Intent intent;
                       intent = new Intent(LoginActivity.this, MainActivity.class);
                       Toast.makeText(LoginActivity.this, "New account created", Toast.LENGTH_SHORT).show();
                       startActivity(intent);
                       finish();
                   } catch (IllegalStateException e) {
                       Log.i("CatchExceptions", e.getMessage());
                   }
                }
});

答案 3 :(得分:0)

在捕获IllegalStateException之后也捕获异常,并记录详细信息,该详细信息应为您提供有关该异常的更多信息。