我的Android应用程序中出现了这个空指针异常:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at a.a.a.a.l.b(SourceFile:1)
at a.a.a.b.c$a.c(SourceFile:9)
at a.a.a.b.c.b(SourceFile:29)
at androidx.recyclerview.widget.RecyclerView$f.a(SourceFile:14)
at androidx.recyclerview.widget.RecyclerView$u.a(SourceFile:162)
我有一个包含三个片段和底部栏的android应用,底部栏显示了来自Firebase数据库的一些信息。该应用程序已经在Google Play中运行,并且启动前的报告显示了该异常。 我检查代码并在调用所有字符串对象中的方法等于之前添加一个if,仅在对象不为null时才调用该方法。最糟糕的是,当我检查设备(从android studio安装了应用程序)以进行调试时,该应用程序不会崩溃。但是,如果我从Google Play下载该应用程序,则会崩溃。
下面是日志和其他文件
public class SpecialsFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
private SpecialsViewModel specialsViewModel;
private ImageView mExpandedImage;
private SwipeRefreshLayout refreshLayout;
private ExpandableSpecialsAdapter specialsAdapter;
private RecyclerView specialsRecyclerView;
private RecyclerView.LayoutManager layoutManager;
public View onCreateView( @NonNull LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState ) {
((Main2activity)getactivity()).fragmentState = MainactivityNavigationState.ShowingSpecials;
specialsViewModel =
ViewModelProviders.of(this).get(SpecialsViewModel.class);
View root = inflater.inflate(R.layout.fragment_specials,container,false);
refreshLayout = root.findViewById(R.id.swipe_refresh);
refreshLayout.setOnRefreshListener(this);
mExpandedImage = ((Main2activity)getactivity()).getExpandedImage();
specialsRecyclerView = root.findViewById(R.id.specials_recyclerview);
specialsAdapter = new ExpandableSpecialsAdapter(getcontext(),mExpandedImage);
layoutManager = new LinearLayoutManager(getcontext());
specialsRecyclerView.setLayoutManager(layoutManager);
specialsRecyclerView.setadapter(specialsAdapter);
return root;
}
private Specials getSpecial( QueryDocumentsnapshot document ) {
String name = document.get("name").toString();
String where = document.get("where").toString();
String fromDay = document.get("from_day").toString();
String toDay = document.get("to_day").toString();
String fromTime = document.get("from_hour").toString();
String toTime = document.get("to_hour").toString();
String pic = document.get("picture").toString();
String description = document.get("description").toString();
return new Specials(name,where,fromDay,toDay,fromTime,toTime,pic,description);
}
@Override
public void onViewCreated( @NonNull View view,@Nullable Bundle savedInstanceState ) {
super.onViewCreated(view,savedInstanceState);
onRefresh();
}
@Override
public void onRefresh() {
refreshLayout.setRefreshing(true);
specialsViewModel.getallSpecials().observe(this,new Observer<List<ListItem>>() {
@Override
public void onChanged( List<ListItem> listItems ) {
if (listItems.size()>0)
specialsAdapter.setData(listItems);
else {
specialsAdapter.setData(new ArrayList<ListItem>());
Toast.makeText(getcontext(),"Sorry,we don't have any specials at the moment",Toast.LENGTH_LONG).show();
}
refreshLayout.setRefreshing(false);
}
});
}
}
FATAL EXCEPTION: ControllerMessenger
Process: com.rp.myrestaurants,PID: 14148
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at a.a.a.a.l.b(SourceFile:1)
at a.a.a.b.c$a.c(SourceFile:9)
at a.a.a.b.c.b(SourceFile:29)
at androidx.recyclerview.widget.RecyclerView$f.a(SourceFile:14)
at androidx.recyclerview.widget.RecyclerView$u.a(SourceFile:162)
at androidx.recyclerview.widget.LinearLayoutManager$c.a(SourceFile:10)
at androidx.recyclerview.widget.LinearLayoutManager.a(SourceFile:107)
at androidx.recyclerview.widget.LinearLayoutManager.a(SourceFile:94)
at androidx.recyclerview.widget.LinearLayoutManager.c(SourceFile:126)
at androidx.recyclerview.widget.RecyclerView.f(SourceFile:8)
at androidx.recyclerview.widget.RecyclerView.d(SourceFile:9)
at androidx.recyclerview.widget.RecyclerView.onLayout(SourceFile:2)
at android.view.View.layout(View.java:16651)
at android.view.ViewGroup.layout(ViewGroup.java:5441)
at androidx.swiperefreshlayout.widget.SwipeRefreshLayout.onLayout(SourceFile:11)
at android.view.View.layout(View.java:16651)
at android.view.ViewGroup.layout(ViewGroup.java:5441)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16651)
at android.view.ViewGroup.layout(ViewGroup.java:5441)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16651)
at android.view.ViewGroup.layout(ViewGroup.java:5441)
at androidx.constraintlayout.widget.ConstraintLayout.onLayout(SourceFile:12)
at android.view.View.layout(View.java:16651)
at android.view.ViewGroup.layout(ViewGroup.java:5441)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16651)
at android.view.ViewGroup.layout(ViewGroup.java:5441)
at androidx.appcompat.widget.actionBarOverlayLayout.onLayout(SourceFile:13)
at android.view.View.layout(View.java:16651)
at android.view.ViewGroup.layout(ViewGroup.java:5441)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16651)
at android.view.ViewGroup.layout(ViewGroup.java:5441)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
at android.view.View.layout(View.java:16651)
at android.view.ViewGroup.layout(ViewGroup.java:5441)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2678)
at android.view.View.layout(View.java:16651)
at android.view.ViewGroup.layout(ViewGroup.java:5441)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2183)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1943)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1119)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6060)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:746)
at android.os.Handler.dispatchMessage(Handler.java:95)
at androidx.test.espresso.base.Interrogator.a(Interrogator.java:19)
at androidx.test.espresso.base.UiControllerImpl.a(UiControllerImpl.java:169)
at androidx.test.espresso.base.UiControllerImpl.a(UiControllerImpl.java:161)
at androidx.test.espresso.base.UiCont
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-android'
//apply plugin: 'io.fabric'
apply plugin: "androidx.navigation.safeargs"
android {
compileSdkVersion 29
defaultConfig {
applicationid "com.rp.myrestaurants"
minSdkVersion 16
targetSdkVersion 29
versionCode 14
versionName "1.3"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
javaCompileOptions {
annotationProcessorOptions {
arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
}
}
vectorDrawables.useSupportlibrary = true
}
buildTypes {
release {
// Enables code shrinking,obfuscation,and optimization for only
// your project's release build type.
minifyEnabled true
// Enables resource shrinking,which is performed by the
// Android Gradle plugin.
shrinkResources true
}
}
compileOptions {
targetcompatibility = "1.8"
sourceCompatibility = "1.7"
}
buildToolsVersion = '29.0.2'
}
dependencies {
implementation fileTree(dir: 'libs',include: ['*.jar'])
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
implementation 'androidx.navigation:navigation-fragment:2.1.0'
implementation 'androidx.navigation:navigation-ui:2.1.0'
testImplementation 'junit:junit:4.13-beta-3'
androidTestImplementation 'androidx.test:runner:1.3.0-alpha02'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0-alpha02'
implementation 'com.google.firebase:firebase-core:17.2.0'
implementation 'com.google.firebase:firebase-firestore:21.1.0'
implementation 'com.google.firebase:firebase-messaging:20.0.0'
implementation 'com.google.firebase:firebase-database:19.1.0'
//crahslitics dependecy
// (Recommended) Add Analytics
implementation 'com.google.firebase:firebase-analytics:17.2.0'
// Add dependency
implementation 'com.squareup.picasso:picasso:2.71828'
implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
def nav_version = "2.1.0-rc01"
// Java
implementation "androidx.navigation:navigation-fragment:$nav_version"
implementation "androidx.navigation:navigation-ui:$nav_version"
implementation "com.ablanco.zoomy:zoomy:1.1.0"
implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
// Extensions = ViewModel + LiveDat
implementation group: 'androidx.room',name: 'room-runtime',version: '2.1.0'
//implementation "android.arch.persistence.room:compiler:2.1.0"
annotationProcessor group: 'androidx.room',name: 'room-compiler',version: '2.1.0'
androidTestImplementation "android.arch.persistence.room:testing:2.1.0"
implementation "androidx.core:core-ktx:+"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.1.0"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
apply plugin: 'com.google.gms.google-services'
repositories {
mavenCentral()
}