Исключение NullPointerException с приложением в рабочей среде при вызове api

#android #android-studio #nullpointerexception #retrofit2

Вопрос:

У меня есть приложение в производстве. В моем приложении на экране «Забыли пароль», когда пользователь вводит свой номер мобильного телефона, вызывается api, и пользователь получает OTP на введенный номер ,api выполняется так, как задумано, но я получаю исключение NullPointerException в моем производственном приложении, и пользователь не перенаправляется на следующий экран, как следует, все работает нормально в отладочной сборке для целей тестирования, но в производстве это вызывает исключение NullPointerException. Я вижу, что вызов api завершен успешно из-за инструкции print, которая у меня есть во время успешного вызова api, но после этого сообщения logcat показывает исключение NullPointerException. Когда возникает исключение NullPointerException и в logcat я не могу определить, в чем именно заключается проблема, поскольку оно не указывает, какая часть кода отвечает за NPE.

 private void forgotPasswordApi() {
    if (Util.isConnectingToInternet(context)) {
        CommonMethods.showLoading(this);

        MultipartBody.Builder builder = new MultipartBody.Builder();
        builder.setType(MultipartBody.FORM);
        builder.addFormDataPart(Constants.MOBILE, mobileEt.getText().toString());
        MultipartBody requestBody = builder.build();

        RetrofitClient.getAPIService().userForgotPassword(requestBody).enqueue(new Callback<RetroResponse>() {
            @Override
            public void onResponse(@NotNull Call<RetroResponse> call, Response<RetroResponse> response) {
                CommonMethods.dismissLoading();
                Log.e("USER FORGOT PASSWORD","INSIDE onResponse BLOCK ");
                try {
                    if (response.code() == 200) {
                        String user_id = response.body().getData().getUser_id();
                         startActivity(new Intent(UserForgotPasswordActivity.this, ForgotOtpVerifyActivity.class)
                        .putExtra(Constants.USER_ID, user_id));

                    } else if (response.code() == 400) {
                        Log.e("USER FORGOT PASSWORD","INSIDE 400 BLOCK ");
                        Util.ShowToastMessage(context, R.string.user_not_registered);
                    } else {
                        if (response.body().getStatus() == 401) {
                            Util.ShowToastMessage(context, "Something went wrong");
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Call<RetroResponse> call, Throwable t) {
                Log.e("USER FORGOT PASSWORD","INSIDE onFailure BLOCK ");
                CommonMethods.dismissLoading();
            }
        });
    } else {
        Util.ShowToastMessage(context, R.string.internet_connection);
    }
}
 

Это сообщение об исключении, которое я получаю в logcat чуть ниже сообщения об успешной печати :

     2021-09-21 12:42:37.006 18184-18184/? W/System.err: java.lang.NullPointerException
2021-09-21 12:42:37.006 18184-18184/? W/System.err:     at c.e.a.e.a.b.m1.a(SourceFile:9)
2021-09-21 12:42:37.006 1585-1585/? D/StatusBar: disable<e i a s b h r c s > disable2<q i n >
2021-09-21 12:42:37.006 18184-18184/? W/System.err:     at t.b.run(SourceFile:1)
2021-09-21 12:42:37.006 18184-18184/? W/System.err:     at android.os.Handler.handleCallback(Handler.java:938)
2021-09-21 12:42:37.006 18184-18184/? W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:99)
2021-09-21 12:42:37.006 18184-18184/? W/System.err:     at android.os.Looper.loop(Looper.java:236)
2021-09-21 12:42:37.006 18184-18184/? W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:8043)
2021-09-21 12:42:37.006 18184-18184/? W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
2021-09-21 12:42:37.006 18184-18184/? W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:620)
2021-09-21 12:42:37.006 18184-18184/? W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1011)
 

Когда я тестировал свое приложение с помощью отладочной сборки , я не сталкивался с каким-либо таким исключением, оно поставляется с приложением в производстве(в магазине Google Play), Пожалуйста, предложите любое решение или назовите возможную причину исключения, спасибо.

Комментарии:

1. По какой линии у вас есть NPE? Можете ли вы сказать, какая переменная равна нулю ?

2. @ChrisNeve я не могу определить, где именно в коде возникает исключение, потому что мне удается распечатать только некоторые журналы из приложения в prosuction.

Ответ №1:

Причина,по которой вы видите эти странные символы a,b, c, заключается в том, что вы запутываете свой код. Вам необходимо устранить путаницу или обозначить следы стека сбоев на игровой консоли. Для лучшего управления сбоями вы можете использовать Firebase crashlytics. Когда вы устраните путаницу в трассировке стека, вы увидите, какая часть точно равна нулю.

Комментарии:

1. Приложение не совсем разбивается, поэтому я ничего не вижу в отчете о сбое в play console, и мне нужно удалить firebase crashlytics, потому что он не позволял мне создавать подписанный apk. когда я пытался сгенерировать подписанный apk, я получал некоторые ошибки во время сборки, поэтому я искал проблему, и кто-то в SO предложил удалить crashlytics из файла build.gradle, что я и сделал.