当我将FireBase SDK添加到我的Android Studio项目时,应用程序开始崩溃。
有MainActivity Java代码:
//import ...
public class MainMenu extends AppCompatActivity {
FirebaseFirestore db = FirebaseFirestore.getInstance();
Button close = findViewById(R.id.button);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_menu);
close.setOnClickListener(mCorkyListener);
}
private View.OnClickListener mCorkyListener = new View.OnClickListener() {
public void onClick(View v) {
Map<String, Object> user = new HashMap<>();
user.put("first", "Ada");
user.put("last", "Lovelace");
user.put("born", 1815);
db.collection("users")
.add(user)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
private static final String TAG = "DocSnippets" ;
@Override
public void onSuccess(DocumentReference documentReference) {
Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId());
}
})
.addOnFailureListener(new OnFailureListener() {
private static final String TAG = "DocSnippets" ;
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error adding document", e);
}
});
}
};
}
以下是活动xml代码(非常简短):
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainMenu">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="148dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="148dp"
android:layout_marginBottom="264dp"
android:text="@string/send"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1.0" />
</android.support.constraint.ConstraintLayout>
以下是错误消息日志:
java.lang.RuntimeException:无法实例化活动 ComponentInfo {news.com.zed.vegenews / news.com.zed.vegenews.MainMenu}: java.lang.NullPointerException:尝试调用虚拟方法 上的“ android.view.Window $ Callback android.view.Window.getCallback()” 空对象引用致命异常:主过程: news.com.zed.vegenews,PID:9471 java.lang.RuntimeException:无法 实例化活动 ComponentInfo {news.com.zed.vegenews / news.com.zed.vegenews.MainMenu}: java.lang.NullPointerException:尝试调用虚拟方法 上的“ android.view.Window $ Callback android.view.Window.getCallback()” 空对象引用位于 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2843) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 在 android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1808) 在android.os.Handler.dispatchMessage(Handler.java:106) android.os.Looper.loop(Looper.java:193)在 android.app.ActivityThread.main(ActivityThread.java:6669)在 java.lang.reflect.Method.invoke(本机方法)位于 com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:493) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 原因:java.lang.NullPointerException:尝试调用虚拟 方法'android.view.Window $ Callback android.view.Window.getCallback()'上的空对象引用 android.support.v7.app.AppCompatDelegateImpl。(AppCompatDelegateImpl.java:249) 在 android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:182) 在 android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:520) 在 android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:191) 在news.com.zed.vegenews.MainMenu。(MainMenu.java:21)在 java.lang.Class.newInstance(本机方法),位于 android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:69) 在 android.support.v4.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:43) 在android.app.Instrumentation.newActivity(Instrumentation.java:1215) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2831) ...还有11个
Firebase SDK已正确安装。我不知道为什么它不起作用。我已经尝试过重新制作一个项目,但是问题仍然没有解决。
UPD。新的logcat
java.lang.RuntimeException:无法启动活动ComponentInfo {news.com.zed.vegenews / news.com.zed.vegenews.MainMenu}: java.lang.NullPointerException:尝试调用虚拟方法'void android.widget.Button.setOnClickListener(android.view.View $ OnClickListener)' 在空对象上引用FATAL EXCEPTION:主过程: news.com.zed.vegenews,PID:12705 java.lang.RuntimeException:无法 开始活动 ComponentInfo {news.com.zed.vegenews / news.com.zed.vegenews.MainMenu}: java.lang.NullPointerException:尝试调用虚拟方法'void android.widget.Button.setOnClickListener(android.view.View $ OnClickListener)' 在一个空对象引用上 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 在 android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1808) 在android.os.Handler.dispatchMessage(Handler.java:106) android.os.Looper.loop(Looper.java:193)在 android.app.ActivityThread.main(ActivityThread.java:6669)在 java.lang.reflect.Method.invoke(本机方法)位于 com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:493) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 原因:java.lang.NullPointerException:尝试调用虚拟 方法“无效” android.widget.Button.setOnClickListener(android.view.View $ OnClickListener)' 在一个空对象引用上 news.com.zed.vegenews.MainMenu.onCreate(MainMenu.java:28)在 android.app.Activity.performCreate(Activity.java:7136)在 android.app.Activity.performCreate(Activity.java:7127)在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893) ...还有11个
已更新。 2:编辑过的Java代码(实际上是先前Upd中的logcat。):
public class MainMenu extends AppCompatActivity {
private FirebaseFirestore db;
private Button close;
//...
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_menu);
db = FirebaseFirestore.getInstance();
close = findViewById(R.id.button);
close.setOnClickListener(mCorkyListener);
}
}