Я получаю исключение 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;
}
}