Как правильно понять гонку стека, предоставленную отчетом о сбое консоли Google Play

#java #android #stack-trace #google-play-console #crash-reports

Вопрос:

Я получаю сведения о сбое, как следует из отчета о сбое консоли Google Play.

 java.lang.NullPointerException: 
  at com.csa.bluetoothremote.MainActivity$11.onClick (MainActivity.java:62)
  at androidx.appcompat.app.AlertController$ButtonHandler.handleMessage (AlertController.java:37)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:246)
  at android.app.ActivityThread.main (ActivityThread.java:8506)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:602)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1130)
 

Но я не могу понять, что означает $11 в MainActivity$11 и 62 из (MainActivity.java:62) во 2-й строке выше. Я думал, 62 означает номер строки. Но в моем коде есть некоторые импортные данные в строке 62. Так что же означают эти цифры? Я хочу знать, как правильно отобразить эти данные в моем исходном коде и найти, где именно произошла ошибка.

Проблема, как я догадываюсь, где-то здесь. Но я хочу знать точное место

         LayoutInflater inflater = LayoutInflater.from(this);
        View view = inflater.inflate(R.layout.add_widget_dialog, null);
        final RelativeLayout mainViewLayout = view.findViewById(R.id.mainViewLayout);
        ImageButton btnIcon = view.findViewById(R.id.btn_widget_icon);
        final ImageButton mainImgBtn = view.findViewById(R.id.mainImgBtn);
        Button btnColor = view.findViewById(R.id.btn_widget_color);
        final Button mainTxtBtn = view.findViewById(R.id.mainTxtBtn);
        final EditText txtId = view.findViewById(R.id.txt_widget_id);
        final EditText txtDown = view.findViewById(R.id.txt_down);
        final EditText txtUp = view.findViewById(R.id.txt_up);
        final Switch swchIsTgl = view.findViewById(R.id.swch_isTgl);

        btnColor.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                selectColor(values, v, mainImgBtn, mainTxtBtn, mainViewLayout);
            }
        });

        btnIcon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                selectIcon(values, v, mainImgBtn, mainTxtBtn, mainViewLayout);
            }
        }); 

        AlertDialog.Builder dBld = new AlertDialog.Builder(this);


        dBld.setView(view);
       

        dBld.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                ...
            }
        });


        dBld.setNegativeButton("Cancel", null);
        AlertDialog dlg = dBld.create();
        dlg.show();
 

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

1. Пожалуйста, предоставьте свой код для основной активности

2. $11 относится к внутреннему классу, предположительно вашему обработчику кликов. Посмотрите на номер строки.

3. @Рустам извини, в моем основном аккаунте около 1800 строк. Но я думаю, что проблема в определенном моменте. Я обновлю свой вопрос этой частью. Но номера строк не равны этому. строка № 62 содержит некоторые импортированные библиотеки.

4. это определенно связано с предупреждением , пожалуйста , проверьте свою кнопку внутри вашего пользовательского класса предупреждений и проверьте жизненный цикл предупреждений , возможно, вы вызываете положительную/отрицательную кнопку, но предупреждение было сброшено как «нулевое», затем также проверьте proguard

5. попробуйте переместить объект оповещения как локальный, а затем инициализировать его методом onCreate()