Сбой приложения Android 11 при открытии с исключением нулевого указателя

#android #crash

#Android #сбой

Вопрос:

Мы разработали приложение для мобильного банкинга, которое загружается из playstore сразу после сбоя на заставке. невозможно определить номер строки.

Получено сообщение о проблеме с консоли Google Play.

        java.lang.RuntimeException: 
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3779)
  at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3943)
  at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:85)
  at android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:135)
  at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:95)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2276)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:246)
  at android.app.ActivityThread.main (ActivityThread.java:8414)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:596)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1130)
Caused by: java.lang.NullPointerException: 
  at com.android.internal.policy.PhoneWindow.getInsetsController (PhoneWindow.java:4120)
  at com.mbanking.vsbl.vsbl.activity.SS.onCreate (Unknown Source:14)
  at android.app.Activity.performCreate (Activity.java:8171)
  at android.app.Activity.performCreate (Activity.java:8155)
  at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1309)
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3752)
 

Я уже упоминал кодирование активности заставки. Я не могу определить, какой код строки сбой, и проверил, что телефон oneplus работает, у него нет другого устройства с версией Android 11. ПОЭТОМУ невозможно запустить и устранить проблему

  package com.mbanking.vsbl.vsbl.activity;

@SuppressWarnings({"unused", "deprecation"})
public class SS extends Activity   {


    //VARIABLE DECLARATION
    private Context ctx;
    private static AlertDialog alertDialog;
    private Utils utils;
    // public native String abc();
    private final WSCallerVersionListener wSCallerVersionListener = new WSCallerVersionListener() {
        @Override
        public void onGetResponse(boolean isUpdateAvailable) {
            if (isUpdateAvailable) {
                showUpdateDialog();
            }
            else
            {
                submit_getBankDetails_MOB();

            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        //REMOVE STATUS BAR IN PROGRATMICALLY
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splashscreen);
        ctx = this;
        utils = new Utils();
        HeaderImageUtils headerImageUtils = new HeaderImageUtils();
        ImageView splashlogo = findViewById(R.id.splashlogo);
        ImageView csplashlogo = findViewById(R.id.csplashlogo);
        TextView text_bankname = findViewById(R.id.text_bankname);
        headerImageUtils.setImage(Constants.BANK_ID, splashlogo, ctx, csplashlogo);
         //refer constand and take corresponsing app name
        Prefs.setAndroid_id(ctx, Constants.app_ajmsb);
        text_bankname.setText(Constants.bankname_cedge);
        //clearing all values
        Prefs.setpausetime(ctx, null);
        
        InternetConnectionUtils internetConnectionUtils = new InternetConnectionUtils();

        int Internet_check = internetConnectionUtils.Internetconnect_Check(ctx);
        if (Internet_check == 0) {
            int appsignautestatus = Utils.checkAppSignatureALL(ctx);
              if (appsignautestatus == 0) {
                 if (!Utils.isDeviceRooted()) {

                        new GPSA(ctx, wSCallerVersionListener).execute();
                 } else {
                    CommonDialog.DeleteAlertRoot(ctx,utils);
                }
            } else {
                CommonDialog.DeleteAlert(ctx, utils);
            }
        } else {
            CommonDialog.simpleAlert(alertDialogInterface, utils, "#275599", ctx, getString(R.string.netconnect), Constants.INTERNET);
        }


    }



    private void submit_getBankDetails_MOB() {
        CommonDialog.progressAlert(ctx);
        MobileUserDTO mobileUserDTO = new MobileUserDTO();
        APIRestCallTask asyncTask = new APIRestCallTask(ctx, mResultCallback, ServerUtils.getBankDetails_MOB, "getBankDetails_MOB", mobileUserDTO);
        asyncTask.execute();

    }


    @Override
    protected void onDestroy() {
         CommonDialog.ondismiss();
        CommonDialog.onProgressdismiss();
        super.onDestroy();
    }

    // interface methods for receivng alertdialog status and back to privous fragment
    private final AlertDialogInterface alertDialogInterface = new AlertDialogInterface() {
        @Override
        public void DialogRestult(String result) {
            finish();
            finishAffinity();

        }
    };

    private void Restcall1(String str_Theme_color) {

        if (str_Theme_color.equalsIgnoreCase("themeRed")) {
            Prefs.setapptoolbackdark(ctx, "#D32F2F");
            Prefs.setappbacklight(ctx, "#F34E46");
            Prefs.setGradient_middle(ctx, "#FF6B5E");
        } else  {
            Prefs.setapptoolbackdark(ctx, "#275599");
            Prefs.setappbacklight(ctx, "#476DB4");
            Prefs.setGradient_middle(ctx, "#6486D0");
        } 

    }


    //Getting Response from Resttempalte using Asyntask
    private final IResult mResultCallback = new IResult() {
        @Override
        public void notifySuccess(String response, String str_fromapi) {
            CommonDialog.onProgressdismiss();
            String[] result = response.split(" ", 2);
            String response1;
            if (response.length() > 0) {
                if (response.length() == 5) {
                    response1 = response.substring(0, 5);
                } else {
                    response1 = response.substring(0, 7);
                }
            } else {
                response1 = response;
            }

            if (response1.toLowerCase().contains(Constants.SUCCESS.toLowerCase())) {
                CommonDialog.simpleAlert(alertDialogInterface, utils, "#275599", ctx, response, Constants.SUCCESS);
            } else if (response1.toLowerCase().contains(Constants.ALERT.toLowerCase())) {
                CommonDialog.simpleAlert(alertDialogInterface, utils, "#275599", ctx, result[1].replace(":", ""), Constants.ALERT);
            } else if (response1.toLowerCase().contains(Constants.ERROR.toLowerCase())) {
                CommonDialog.simpleAlert(alertDialogInterface, utils, "#275599", ctx, response, Constants.ERROR);
            } else {
                try {
                    JSONObject jsonObject = new JSONObject(response);
                    JSONObject jsonObject1 = jsonObject.getJSONObject("bankURLs");
                    String str_theme = jsonObject1.getString("theme");
                    Restcall1(str_theme);
                    Base64Encoder_Decoder  base64Encoder_decoder = new Base64Encoder_Decoder();
                    String  str_encodedparams = base64Encoder_decoder.encrypt(response, base64Encoder_decoder.decrypt_sig(Prefs.getAndroid_id(ctx), Utils.Get_Sha_lt(Utils.checkAppSignature(ctx))));
                     SharedPreferences appSharedPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
                    SharedPreferences.Editor prefsEditor = appSharedPrefs.edit();
                    prefsEditor.putString("bankresponse", str_encodedparams);
                    prefsEditor.apply();
                    Prefs.setbankresponse(ctx,str_encodedparams);
                    Intent nextPage = new Intent(SS.this, SSS.class);
                    nextPage.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(nextPage);
                    finish();
                    finishAffinity();
                } catch (Exception ignored) {
                }
            }
        }

        @Override
        public void notifyError(String error) {
            CommonDialog.onProgressdismiss();
            CommonDialog.simpleAlert(alertDialogInterface, utils, "#275599", ctx, error, Constants.ERROR);
        }
    };

    private void showUpdateDialog() {
        final String appUrl = Utils.fetchApplicationUrl(ctx);
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(SS.this);
        alertDialogBuilder.setTitle(SS.this.getString(R.string.app_name));
        alertDialogBuilder.setMessage(SS.this.getString(R.string.updateapp));
        alertDialogBuilder.setCancelable(false);
        alertDialogBuilder.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                if (alertDialog != null amp;amp; alertDialog.isShowing()) {
                    alertDialog.dismiss();
                    alertDialog.cancel();
                    SS.this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(appUrl)));
                }
             }
        });

        if (!((Activity) ctx).isFinishing()) {

            alertDialog = alertDialogBuilder.create();
            alertDialog.show();
        }
     }
}
 

Ответ №1:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        final WindowInsetsController insetsController = getWindow().getInsetsController();
        if (insetsController != null) {
            insetsController.hide(WindowInsets.Type.statusBars());
        }
    } else {
        getWindow().setFlags(
                WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN
        );
    }
 

Попробуйте это перед установкой представления содержимого

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

1. requestWindowFeature(Окно. FEATURE_NO_TITLE); эта строка будет работать для всех версий правильно