java - 当我已经创建布局时,如何修复“无法解析符号 activity_home”?
问题描述
我有三个布局,activity_main、activity_login 和 activity_home。在 LoginActivity 或 HomeActivity java 文件中,我收到错误“无法解析符号活动_(家庭或登录)。我尝试删除它并通过单击错误上的“alt+enter”创建一个新的,但仍然没有工作。我想我必须在 AndroidManifest 中添加一些内容,但我们在课堂上从未讨论过。如果有人能提供帮助,那就太好了。谢谢。
这是我的activity_main.xml(注意:我的activity_login 和activity_main 几乎是完全相同的代码,只是@+id 不同):
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/emailEditText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="300dp"
android:ems="10"
android:hint="email"
android:inputType="textEmailAddress"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/passwordEditText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:hint="password"
android:inputType="textPassword"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/emailEditText"
app:layout_constraintVertical_bias="0.052" />
<ImageView
android:id="@+id/imageView"
android:layout_width="356dp"
android:layout_height="235dp"
android:cropToPadding="false"
android:scaleType="fitStart"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.032"
app:srcCompat="@drawable/guitar" />
<Button
android:id="@+id/signUpButton"
android:layout_width="133dp"
android:layout_height="73dp"
android:text="Sign Up!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/passwordEditText"
app:layout_constraintVertical_bias="0.54" />
<TextView
android:id="@+id/signInTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Already have an account? Sign in here!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/signUpButton" />
</androidx.constraintlayout.widget.ConstraintLayout>
这是我的 LoginActivity.java:
package com.antonioocasio.finalproject;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
public class LoginActivity extends AppCompatActivity {
public EditText emailIdEditText, passwordEditText;
private FirebaseAuth.AuthStateListener firebaseAuthStateListener;
Button signInBtn;
TextView signUpTextView;
FirebaseAuth firebaseAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
firebaseAuth = FirebaseAuth.getInstance();
emailIdEditText = findViewById(R.id.emailEditText2);
passwordEditText = findViewById(R.id.passwordEditText);
signInBtn = findViewById(R.id.signInButton);
signUpTextView = findViewById(R.id.signUpTextView);
firebaseAuthStateListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
if(firebaseUser != null){
Toast.makeText(LoginActivity.this, "You are logged in", Toast.LENGTH_LONG).show();
Intent i = new Intent(LoginActivity.this, HomeActivity.class);
startActivity(i);
} else {
Toast.makeText(LoginActivity.this, "Please Login", Toast.LENGTH_LONG).show();
}
}
};
signInBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String email = emailIdEditText.getText().toString();
String password = passwordEditText.getText().toString();
if(email.isEmpty()){
Toast.makeText(getApplicationContext(), "Error: Email must be entered.", Toast.LENGTH_LONG).show();
emailIdEditText.requestFocus();
} else if(password.isEmpty()){
Toast.makeText(getApplicationContext(), "Error: Password must be entered.", Toast.LENGTH_LONG).show();
passwordEditText.requestFocus();
} else if(email.isEmpty() && password.isEmpty()){
Toast.makeText(getApplicationContext(), "Error:Both fields must be entered.", Toast.LENGTH_LONG).show();
} else if(!(email.isEmpty() && password.isEmpty())){
firebaseAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(!task.isSuccessful()){
Toast.makeText(getApplicationContext(), "Login Error, Please try again.", Toast.LENGTH_LONG).show();
} else {
Intent intToHome = new Intent(LoginActivity.this, HomeActivity.class);
startActivity(intToHome);
}
}
});
} else {
Toast.makeText(getApplicationContext(), "Error Occurred!", Toast.LENGTH_LONG).show();
}
}
});
signUpTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intSignUp = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intSignUp);
}
});
}
@Override
protected void onStart() {
super.onStart();
firebaseAuth.addAuthStateListener(firebaseAuthStateListener);
}
}
最后,这是我的 AndroidMainfiest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.antonioocasio.finalproject">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".HomeActivity"></activity>
<activity android:name=".LoginActivity" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
同样,我真的不确定问题可能是什么。我完全不知所措。
编辑:这个错误终于出现了。我真的不知道从哪里开始,因为它有这么多:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.antonioocasio.finalproject, PID: 17363
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.antonioocasio.finalproject/com.antonioocasio.finalproject.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
at com.antonioocasio.finalproject.MainActivity.onCreate(MainActivity.java:39)
at android.app.Activity.performCreate(Activity.java:7802)
at android.app.Activity.performCreate(Activity.java:7791)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
解决方案
推荐阅读
- advanced-custom-fields - 使用高级自定义字段复制古腾堡块内容以创建古腾堡块
- vmware - Arch 上的 Vmware:无法打开 /dev/vmmon:没有这样的文件或目录
- flutter - 我想在 Flutter 的类模型中将 Screen_Name 作为属性传递
- java - 如果使用重试策略的前 3 次尝试重试失败,如何使用新的访问令牌重试
- javascript - 过滤器方法的回调有副作用好吗
- swift - 内存中的 Swift 数组实例
- python - 我正在编写一个python for循环,程序在其中提出问题,如果用户输入某个答案,程序将显示某个消息
- c - 为什么堆栈的行为如此奇怪?
- javascript - React 路由器 - 从对象列表导航到单个对象的最佳实践是什么
- node.js - '*' 作为 app.get() 中的路由是什么意思?