Proguard - получение исключения NullPointerException для FloatingActionButton с использованием findViewById - PullRequest
0 голосов
/ 14 октября 2019

Я получаю исключение NullPointerException для FloatingActionButton, используя Proguard. Это ошибка: -

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: org.plabs.app.unews, PID: 2216
    java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.material.animation.MotionTiming com.google.android.material.animation.MotionSpec.getTiming(java.lang.String)' on a null object reference
        at com.google.android.material.floatingactionbutton.FloatingActionButtonImpl.createAnimator(:519)
        at com.google.android.material.floatingactionbutton.FloatingActionButtonImpl.hide(:382)
        at com.google.android.material.floatingactionbutton.FloatingActionButton.hide(:540)
        at com.google.android.material.floatingactionbutton.FloatingActionButton.hide(:536)
        at com.google.android.material.floatingactionbutton.FloatingActionButton.hide(:525)
        at org.plabs.app.unews.Activity.SkimActivity.a(:262)
        at org.plabs.app.unews.Activity.SkimActivity.d(:39)
        at org.plabs.app.unews.Activity.SkimActivity$c.onScrolled(:247)

Это мой файл proguard: -

-keep class org.my.package.Models.** { *; }
-keep class org.my.package.ResponseStatus { *; }
-keepattributes Signature
-keepattributes *Annotation*, Exception
-keep class androidx.appcompat.**
-keep class androidx.multidex.**
-keep class androidx.recyclerview.**

-keep class com.google.android.material.** { *; }
-dontwarn com.google.android.material.**
-dontnote com.google.android.material.**

-dontwarn androidx.**
-keep class androidx.** { *; }
-keep interface androidx.** { *; }

-keepattributes InnerClasses
 -keep class **.R
 -keep class **.R$* {
    <fields>;
}

Я использую AndroidX и плавающий ActionButton материала Google.

Код настрока 262 в активности Skim: mFab.hide().

Я ссылаюсь на mFab, используя findViewById mFab = findViewById(R.id.my_fab).

Редактировать: - Соответствующий код из SkimActivity: -

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_skim);
        setLastDate();
        initUI();
        initValues();
        getStoryCount();
    }
private void initUI() {
        mSkimRV = findViewById(R.id.slim_RV);
        mSkimAdapter = new SkimAdapter(mListOfAllItems);
        mSkimRV.setLayoutManager(new LinearLayoutManager(this, RecyclerView.VERTICAL, false));
        mSkimRV.setAdapter(mSkimAdapter);
        mSkimRV.setItemAnimator(new DefaultItemAnimator());

        mFAB = findViewById(R.id.fab_toDefaultMode);

        addOnScrollListener();
        addRefreshListener();

        mFAB.setOnClickListener(v -> {
            Intent intent = new Intent(SkimActivity.this, MainActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
            startActivity(intent);
        });
    }
 private void addOnScrollListener() {
        mSkimRV.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);

                //hide/show FAB
                toggleBottomUIVisibility(dy);

                if (!recyclerView.canScrollVertically(SCROLL_DIRECTION_DOWN)) {
                    if (!mLoading){
                        getStoryCount();
                    }
                }

            }
        });
    }
private void toggleBottomUIVisibility(int dy) {
        if (mScrolledDistance > HIDE_THRESHOLD && mControlsVisible) {
            //onScrolledDown -> hide view
            mFAB.hide();
            mControlsVisible = false;
            mScrolledDistance = 0;
        }
        else if (mScrolledDistance < -HIDE_THRESHOLD && !mControlsVisible) {
            //onScrolledUp -> show view
            mFAB.show();
            mControlsVisible = true;
            mScrolledDistance = 0;
        }

        if ((mControlsVisible && dy > 0) || (!mControlsVisible && dy < 0)) {
            mScrolledDistance += dy;
        }
    }
...