-5

我開發Android應用的初學者。我爲NullException生病了。任何人都可以幫我解決問題嗎?我使用的功能來更新手機,我不知道爲什麼有此按鈕更改電話錯誤。爲什麼我總是NullException的按鈕?

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.google.online_mobile_flexi_parking, PID: 3308 
       java.lang.RuntimeException: Unable to start activity ComponentInfo{com.google.online_mobile_flexi_parking/com.google.online_mobile_flexi_parking.ChangeEmailPassword}: java.lang.NullPointerException 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2198) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2247) 
        at android.app.ActivityThread.access$800(ActivityThread.java:139) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:136) 
        at android.app.ActivityThread.main(ActivityThread.java:5028) 
        at java.lang.reflect.Method.invokeNative(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:515) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:788) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:604) 
        at dalvik.system.NativeStart.main(Native Method) 
       Caused by: java.lang.NullPointerException 
        at com.google.online_mobile_flexi_parking.ChangeEmailPassword.onCreate(ChangeEmailPassword.java:220) 
        at android.app.Activity.performCreate(Activity.java:5238) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2247)  
        at android.app.ActivityThread.access$800(ActivityThread.java:139)  
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)  
        at android.os.Handler.dispatchMessage(Handler.java:102)  
        at android.os.Looper.loop(Looper.java:136)  
        at android.app.ActivityThread.main(ActivityThread.java:5028)  
        at java.lang.reflect.Method.invokeNative(Native Method)  
        at java.lang.reflect.Method.invoke(Method.java:515)  
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:788)  
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:604)  
        at dalvik.system.NativeStart.main(Native Method)  

這裏是我的代碼

import android.support.annotation.NonNull; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.annotation.NonNull; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.text.TextUtils; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ProgressBar; 
import android.widget.Toast; 

import com.firebase.client.core.view.Change; 
import com.google.android.gms.tasks.OnCompleteListener; 
import com.google.android.gms.tasks.Task; 
import com.google.firebase.auth.FirebaseAuth; 
import com.google.firebase.auth.FirebaseUser; 
import com.google.firebase.database.ChildEventListener; 
import com.google.firebase.database.DataSnapshot; 
import com.google.firebase.database.DatabaseError; 
import com.google.firebase.database.DatabaseReference; 
import com.google.firebase.database.FirebaseDatabase; 
import com.google.firebase.database.ValueEventListener; 

import java.util.Map; 

public class ChangeEmailPassword extends AppCompatActivity { 

private Button btnChangeEmail, btnChangePassword, 
     changeEmail, changePassword, back, btnChangePhone, btnChangeCarPlate, changePhone, 
     changeCarPlate, signOut; 

private EditText oldEmail, newEmail, password, newPassword, oldPhone, newPhone, oldCarPlate, newCarPlate; 
private ProgressBar progressBar; 
private FirebaseAuth.AuthStateListener authListener; 
private FirebaseAuth auth; 
private FirebaseUser user; 
private DatabaseReference mDatabase; 
private String txtPhone; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_change_email_password); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    toolbar.setTitle(getString(R.string.app_name)); 
    setSupportActionBar(toolbar); 

    auth = FirebaseAuth.getInstance(); 


    final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
    mDatabase = FirebaseDatabase.getInstance().getReference(); 
    authListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = firebaseAuth.getCurrentUser(); 
      if (user == null) { 

       startActivity(new Intent(ChangeEmailPassword.this, TestUser.class)); 
       finish(); 
      } 
     } 
    }; 

    btnChangeEmail = (Button) findViewById(R.id.change_email_button); 
    btnChangePassword = (Button) findViewById(R.id.change_password_button); 
    changeEmail = (Button) findViewById(R.id.changeEmail); 
    changePassword = (Button) findViewById(R.id.changePass); 
    btnChangePhone=(Button) findViewById(R.id.changePhone); 
    signOut = (Button) findViewById(R.id.sign_out); 
    back=(Button)findViewById(R.id.btnback1); 

    oldEmail = (EditText) findViewById(R.id.old_email); 
    newEmail = (EditText) findViewById(R.id.new_email); 
    password = (EditText) findViewById(R.id.password); 
    newPassword = (EditText) findViewById(R.id.newPassword); 
    oldPhone=(EditText)findViewById(R.id.old_phone); 
    newPhone=(EditText)findViewById(R.id.new_phone); 


    oldEmail.setVisibility(View.GONE); 
    newEmail.setVisibility(View.GONE); 
    password.setVisibility(View.GONE); 
    newPassword.setVisibility(View.GONE); 
    changeEmail.setVisibility(View.GONE); 
    changePassword.setVisibility(View.GONE); 
    oldPhone.setVisibility(View.GONE); 
    newPhone.setVisibility(View.GONE); 
    progressBar = (ProgressBar) findViewById(R.id.progressBar); 

    if (progressBar != null) { 
     progressBar.setVisibility(View.GONE); 
    } 

    back.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      startActivity(new Intent(ChangeEmailPassword.this, TestUser.class)); 
      finish(); 
     } 
    }); 

    btnChangeEmail.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      oldEmail.setVisibility(View.GONE); 
      newEmail.setVisibility(View.VISIBLE); 
      password.setVisibility(View.GONE); 
      newPassword.setVisibility(View.GONE); 
      changeEmail.setVisibility(View.VISIBLE); 
      changePassword.setVisibility(View.GONE); 
      changePhone.setVisibility(View.GONE); 
      oldPhone.setVisibility(View.GONE); 
      newPhone.setVisibility(View.GONE); 
     } 
    }); 

    changeEmail.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      progressBar.setVisibility(View.VISIBLE); 
      if (user != null && !newEmail.getText().toString().trim().equals("")) { 
       user.updateEmail(newEmail.getText().toString().trim()) 
         .addOnCompleteListener(new OnCompleteListener<Void>() { 
          @Override 
          public void onComplete(@NonNull Task<Void> task) { 
           if (task.isSuccessful()) { 

            Toast.makeText(ChangeEmailPassword.this, "Email address is updated. Please sign in with new email id!", Toast.LENGTH_LONG).show(); 
            startActivity(new Intent(ChangeEmailPassword.this, MainActivity.class)); 
            finish(); 
            //signOut(); 
            progressBar.setVisibility(View.GONE); 
           } else { 
            Toast.makeText(ChangeEmailPassword.this, "Failed to update email!", Toast.LENGTH_LONG).show(); 
            progressBar.setVisibility(View.GONE); 
           } 
          } 
         }); 
      } else if (newEmail.getText().toString().trim().equals("")) { 
       newEmail.setError("Enter email"); 
       progressBar.setVisibility(View.GONE); 
      } 
     } 
    }); 

    btnChangePassword.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      oldEmail.setVisibility(View.GONE); 
      newEmail.setVisibility(View.GONE); 
      password.setVisibility(View.GONE); 
      newPassword.setVisibility(View.VISIBLE); 
      changeEmail.setVisibility(View.GONE); 
      changePassword.setVisibility(View.VISIBLE); 
      changePhone.setVisibility(View.GONE); 
      oldPhone.setVisibility(View.GONE); 
      newPhone.setVisibility(View.GONE); 
     } 
    }); 

    changePassword.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      progressBar.setVisibility(View.VISIBLE); 
      if (user != null && !newPassword.getText().toString().trim().equals("")) { 
       if (newPassword.getText().toString().trim().length() < 6) { 
        newPassword.setError("Password too short, enter minimum 6 characters"); 

        progressBar.setVisibility(View.GONE); 
       } else { 
        user.updatePassword(newPassword.getText().toString().trim()) 
          .addOnCompleteListener(new OnCompleteListener<Void>() { 
           @Override 
           public void onComplete(@NonNull Task<Void> task) { 
            if (task.isSuccessful()) { 
             Toast.makeText(ChangeEmailPassword.this, "Password is updated, sign in with new password!", Toast.LENGTH_SHORT).show(); 
             startActivity(new Intent(ChangeEmailPassword.this, MainActivity.class)); 
             finish(); 

             progressBar.setVisibility(View.GONE); 
            } else { 
             Toast.makeText(ChangeEmailPassword.this, "Failed to update password!", Toast.LENGTH_SHORT).show(); 
             progressBar.setVisibility(View.GONE); 
            } 
           } 
          }); 
       } 
      } else if (newPassword.getText().toString().trim().equals("")) { 
       newPassword.setError("Enter password"); 
       progressBar.setVisibility(View.GONE); 
      } 
     } 
    }); 

    btnChangePhone.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      oldEmail.setVisibility(View.GONE); 
      newEmail.setVisibility(View.GONE); 
      password.setVisibility(View.GONE); 
      newPassword.setVisibility(View.GONE); 
      changeEmail.setVisibility(View.GONE); 
      changePassword.setVisibility(View.GONE); 
      changePhone.setVisibility(View.VISIBLE); 
      oldPhone.setVisibility(View.GONE); 
      newPhone.setVisibility(View.VISIBLE); 
     } 
    }); 


    changePhone.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     progressBar.setVisibility(View.VISIBLE); 
     txtPhone=newPhone.getText().toString().trim(); 
     if(!(TextUtils.isEmpty(user.getUid()))) 
     { 

      updateUser(txtPhone); 

     } 
    }} 
    ); 
    } 


public void signOut() { 
    auth.signOut(); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    progressBar.setVisibility(View.GONE); 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    auth.addAuthStateListener(authListener); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    if (authListener != null) { 
     auth.removeAuthStateListener(authListener); 
    } 
} 
private void updateUser(String email) 
{ 
    if(!TextUtils.isEmpty(email)) 
    { 
     mDatabase.child(user.getUid()).setValue(email); 
    } 
} 

}

請幫我解決這個問題。謝謝

+0

初始化您的'onCreate'中的所有內容或使用'Butterknife'綁定視圖 – rookieDeveloper

+0

閱讀此問題的方式與http://stackoverflow.com/questions/32083913/android-gps-requires-access-fine-location-error-甚至,雖然,我的艙單文件 –

+0

你在你的manifest.xml聲明TestUser.class?

回答

0

這意味着R.id.changePhone不在所提供的佈局中,或者R.id.changePhone的視圖不是Button類型。

也可以嘗試登錄的onCreate btnChangePhone的值(Log類),以驗證它不爲空。