很遗憾,Easylearn已停止

问题描述 投票:0回答:1

我被这个错误困扰。我没有弄错地方,所以我通过了Logcat,在那里看到了致命异常。如何解决这个错误?我知道论坛上有很多页面描述了我的问题的解决方案。

我读过很多解决此异常的论坛,但我没有解决此错误的解决方案。

E/AndroidRuntime: FATAL EXCEPTION: main
 Process: com.example.easylearn, PID: 11793
 java.lang.RuntimeException: Unable to instantiate activity 
 ComponentInfo{com.example.easylearn/com.example.easylearn.MainActivity}: 
 java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context 
 android.content.Context.getApplicationContext()' on a null object reference
 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2327)
 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
 at android.app.ActivityThread.-wrap11(ActivityThread.java)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
 at android.os.Handler.dispatchMessage(Handler.java:102)
 at android.os.Looper.loop(Looper.java:148)
 at android.app.ActivityThread.main(ActivityThread.java:5417)
 at java.lang.reflect.Method.invoke(Native Method)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 
 'android.content.Context android.content.Context.getApplicationContext()' on a null object 
 reference
 at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:107)
 at com.example.easylearn.MainActivity.<init>(MainActivity.java:21)
 at java.lang.Class.newInstance(Native Method)
 at android.app.Instrumentation.newActivity(Instrumentation.java:1067)
 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2317)
 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
 at android.app.ActivityThread.-wrap11(ActivityThread.java) 
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
 at android.os.Handler.dispatchMessage(Handler.java:102) 
 at android.os.Looper.loop(Looper.java:148) 
 at android.app.ActivityThread.main(ActivityThread.java:5417)
 at java.lang.reflect.Method.invoke(Native Method) 
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616

这是我的AndroidManifest.xml。

 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.example.easylearn">

 <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>

这是我的MainActivity.java

  package com.example.easylearn;
  import androidx.annotation.NonNull;
  import androidx.appcompat.app.AppCompatActivity;
  import android.content.Intent;
  import android.media.MediaPlayer;
  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.FirebaseAuth;
  public class MainActivity extends AppCompatActivity {
  AppCompatActivity appCompatActivity = new LoginActivity(getApplicationContext());
  EditText emailId,password;
  Button btnSignUp;
  TextView tvSignIn;
  FirebaseAuth mFirebaseAuth;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  mFirebaseAuth = FirebaseAuth.getInstance();
  emailId = findViewById(R.id.editText);
  password = findViewById(R.id.editText2);
  btnSignUp = findViewById(R.id.button2);
  tvSignIn = findViewById(R.id.textView);
  btnSignUp.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
  String email = emailId.getText().toString();
  String pwd = password.getText().toString();
  if(email.isEmpty())
  {
  emailId.setError("Please enter email id");
  emailId.requestFocus();
  }
  else if(pwd.isEmpty())
  {
  password.setError("Please enter password");
  password.requestFocus();
  }
  else if(email.isEmpty() && pwd.isEmpty())
  {
  Toast.makeText(MainActivity.this,"Fiels are Empty!",Toast.LENGTH_SHORT).show();
  }
  else if(!(email.isEmpty() && pwd.isEmpty()))
  {
  mFirebaseAuth.createUserWithEmailAndPassword(email,pwd).addOnCompleteListener(MainActivity.this,
  new OnCompleteListener<com.google.firebase.auth.AuthResult>() {
  @Override
  public void onComplete(@NonNull Task<com.google.firebase.auth.AuthResult> task) 
  {
  if(task.isSuccessful())
  {
  Toast.makeText(MainActivity.this,"SignUp Unsuccessful,Please Try 
  Again..",Toast.LENGTH_SHORT).show();
  }
  else {
  startActivity(new Intent(MainActivity.this,HomeActivity.class));
  }
  }
  });
  }
  else
  {
  Toast.makeText(MainActivity.this,"Error Occured!",Toast.LENGTH_SHORT).show();
  }
  }
  });
  tvSignIn.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
  Intent i = new Intent(MainActivity.this,LoginActivity.class);
  startActivity(i);
  }
  });
  }
  }

这是我的LoginActivity.java

  package com.example.easylearn;

  import androidx.annotation.NonNull;
  import androidx.appcompat.app.AppCompatActivity;

  import android.content.Context;
  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.firebase.auth.FirebaseUser;
  import com.google.android.gms.tasks.OnCompleteListener;
  import com.google.android.gms.tasks.Task;
  import com.google.firebase.auth.FirebaseAuth;

  public class LoginActivity extends AppCompatActivity {

  private Context ctx;
  public LoginActivity(Context ctx){
  this.ctx = ctx;
  }

  EditText emailId,password;
  Button btnSignIn;
  TextView tvSignUp;
  FirebaseAuth mFirebaseAuth;
  private FirebaseAuth.AuthStateListener mAuthStateListener;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_login);

  mFirebaseAuth = FirebaseAuth.getInstance();
  emailId = findViewById(R.id.editText);
  password = findViewById(R.id.editText2);
  btnSignIn = findViewById(R.id.button2);
  tvSignUp = findViewById(R.id.textView);

  mAuthStateListener = new FirebaseAuth.AuthStateListener() {
  @Override
  public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
  FirebaseUser mFirebaseUser = mFirebaseAuth.getCurrentUser();
  if(mFirebaseUser != null){
  Toast.makeText(LoginActivity.this,"You are logged in",Toast.LENGTH_SHORT).show();
  Intent i = new Intent(LoginActivity.this,HomeActivity.class);
  startActivity(i);
  }
  else{
  Toast.makeText(LoginActivity.this,"Please login",Toast.LENGTH_SHORT).show();
  }
  }
  };

  btnSignIn.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
  String email = emailId.getText().toString();
  String pwd = password.getText().toString();
  if(email.isEmpty())
  {
  emailId.setError("Please enter email id");
  emailId.requestFocus();
  }
  else if(pwd.isEmpty())
  {
  password.setError("Please enter password");
  password.requestFocus();
  }
  else if(email.isEmpty() && pwd.isEmpty())
  {
  Toast.makeText(LoginActivity.this,"Fiels are Empty!",Toast.LENGTH_SHORT).show();
  }
  else if(!(email.isEmpty() && pwd.isEmpty()))
  {

  mFirebaseAuth.signInWithEmailAndPassword(email,pwd).addOnCompleteListener(LoginActivity.this, new 
  OnCompleteListener<com.google.firebase.auth.AuthResult>() {
  @Override
  public void onComplete(@NonNull Task<com.google.firebase.auth.AuthResult> task) 
  {
  if(!task.isSuccessful()){
  Toast.makeText(ctx,"Login Error,Please Login      
  again..",Toast.LENGTH_SHORT).show();
  }
  else{
  Intent inToHome = new Intent(LoginActivity.this,HomeActivity.class);
  startActivity(inToHome);
  }
  }
  });
  }
  else
  {
  Toast.makeText(ctx,"Error Occured!",Toast.LENGTH_SHORT).show();
  }
  }
  });

  tvSignUp.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();
  mFirebaseAuth.addAuthStateListener(mAuthStateListener);
  }
  }`
java android firebase-authentication
1个回答
0
投票

[堆栈跟踪说您在getApplicationContext()初始阶段调用MainActivity太早了。

似乎来自此:

AppCompatActivity appCompatActivity = new LoginActivity(getApplicationContext());

完全删除此行。您不使用任何字段,new也不是创建新活动对象的机制---让Android框架使用startActivity()为您完成此操作。

同时,您也需要在LoginActivity中将其删除:

private Context ctx;
public LoginActivity(Context ctx){
this.ctx = ctx;
}

活动需要一个无参数的构造函数,因此框架可以为您实例化它们。 Activity是-Context,因此无论如何都不需要传递Context

© www.soinside.com 2019 - 2024. All rights reserved.