FireBase // java.lang.NullPointerException

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • FireBase // java.lang.NullPointerException

    Hallo Lieber Community,
    ich bin neu hier und hoffe ich habe meine Frage im richtigen Bereich gestellt.
    Ich bin gerade dabei eine kleine Chat App zu programmieren.
    Die App funktioniert in Verbindung mit Firebase.
    Reg und Login funktionieren einwandfrei, auch meine Untermenüs machen bisher keine Probleme.
    Allerdings habe ich ein Problem mit meiner SettingsActivity.
    Bein Versuch in diese zu wechseln crasht meine App und ich erhalte folgenden Fehler :

    Quellcode

    1. AndroidRuntime: FATAL EXCEPTION: main
    2. Process: com.dojoapps.mfu, PID: 10066
    3. java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dojoapps.mfu/com.dojoapps.mfu.SettingsActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.google.firebase.auth.FirebaseUser.getUid()' on a null object reference
    4. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
    5. at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
    6. at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    7. at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    8. at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    9. at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
    10. at android.os.Handler.dispatchMessage(Handler.java:106)
    11. at android.os.Looper.loop(Looper.java:193)
    12. at android.app.ActivityThread.main(ActivityThread.java:6669)
    13. at java.lang.reflect.Method.invoke(Native Method)
    14. at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    15. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
    16. Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.google.firebase.auth.FirebaseUser.getUid()' on a null object reference
    17. at com.dojoapps.mfu.SettingsActivity.onCreate(SettingsActivity.java:51)
    18. at android.app.Activity.performCreate(Activity.java:7136)
    19. at android.app.Activity.performCreate(Activity.java:7127)
    20. at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
    21. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
    22. at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
    23. at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    24. at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    25. at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    26. at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
    27. at android.os.Handler.dispatchMessage(Handler.java:106)
    28. at android.os.Looper.loop(Looper.java:193)
    29. at android.app.ActivityThread.main(ActivityThread.java:6669)
    30. at java.lang.reflect.Method.invoke(Native Method)
    31. at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    32. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
    33. I/Process: Sending signal. PID: 10066 SIG: 9
    34. Application terminated.
    Alles anzeigen



    Hier meine SettingsActivity:



    Quellcode

    1. package com.dojoapps.mfu;
    2. import android.support.annotation.NonNull;
    3. import android.support.v7.app.AppCompatActivity;
    4. import android.os.Bundle;
    5. import android.widget.TextView;
    6. import android.widget.Toast;
    7. import com.google.firebase.auth.FirebaseAuth;
    8. import com.google.firebase.auth.FirebaseUser;
    9. import com.google.firebase.database.DataSnapshot;
    10. import com.google.firebase.database.DatabaseError;
    11. import com.google.firebase.database.DatabaseReference;
    12. import com.google.firebase.database.FirebaseDatabase;
    13. import com.google.firebase.database.ValueEventListener;
    14. import org.w3c.dom.Text;
    15. import de.hdodenhof.circleimageview.CircleImageView;
    16. public class SettingsActivity extends AppCompatActivity {
    17. private DatabaseReference mUserDatabase;
    18. private FirebaseUser mCurrentUser;
    19. private CircleImageView mDisplayImage;
    20. private TextView mName;
    21. private TextView mStatus;
    22. @Override
    23. protected void onCreate(Bundle savedInstanceState) {
    24. super.onCreate(savedInstanceState);
    25. setContentView(R.layout.activity_settings);
    26. mDisplayImage = (CircleImageView) findViewById(R.id. settings_image);
    27. mName = (TextView) findViewById(R.id. settings_display_name);
    28. mStatus = (TextView) findViewById(R.id. settings_status);
    29. mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
    30. FirebaseDatabase.getInstance().getReference();
    31. String current_uid = mCurrentUser.getUid();
    32. mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(current_uid);
    33. mUserDatabase.addValueEventListener(new ValueEventListener() {
    34. @Override
    35. public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    36. String name = dataSnapshot.child("name").getValue().toString();
    37. String image = dataSnapshot.child("image").getValue().toString();
    38. String status = dataSnapshot.child("status").getValue().toString();
    39. String thumb_image = dataSnapshot.child("thumb image").getValue().toString();
    40. mName.setText(name);
    41. mStatus.setText(status);
    42. }
    43. @Override
    44. public void onCancelled(DatabaseError databaseError) {
    45. }
    46. });
    47. }
    48. }
    Alles anzeigen

    Und hier meine FireBase Datenbank Struktur :


    Quellcode

    1. mfumessageforyou
    2. Users
    3. 0f1swOIAXGZyq8KwKnKOPHdZu6K2
    4. image: "default"
    5. name: "445566988"
    6. status: "Hi there, I'm using MFU Chat App."
    7. thumb_image: "default"

    Der Fehler liegt wohl ( so vermute ich ) daran, dass die UID von firebase nicht gelesen werden kann -> NullException. Allerdings blieben bisher alle Versuche den Fehler zu fixen erfolglos und ich stehe wirklich vor einem Rätsel.

    Ich würde mich riesig freuen, wenn sich jemand diesem Problem annehmen und mir etwas auf die Sprünge helfen könnte :)

    Liebe Grüße
    Ebi
  • Hallo auch ich bin voll der Meinung das zum Zeitpunkt gar kein User eingelogt ist.
    Frage wo erstellst und logst du denn überhaupt einen User ein?
    Ist der User überhaupt in der firerbase console vorhanden?

    Normalerweise benutzt man zu Login einen listner.
    Der den User mit Email und Passwort einlogt.

    Schaue dir das mal an
    firebase.google.com/docs/auth/android/password-auth

    Ohne einen listner und vorherigen Registrierung der E-Mail und Passwort von den User wirst kein Erfolg haben.

    Auch musst du in der Konsole die Authentifizierung für Email u Passwort aktivieren. Hoffe das du das überhaupt hast.
    Ein Feedback auf Tipps ist auch schön. :P
  • Hallo zusammen,
    vorab schon einmal vielen Dank für eure Antworten.
    Meiner Meinung nach funktioniert mein Reg und LogIn ... hier mal meine anderen Files, vielleicht hat sich doch ein Fehler eingeschlichen?
    Ich bin wirklich am verzweifeln :D

    Main Activity:

    Quellcode

    1. package com.dojoapps.mfu;
    2. import android.content.Intent;
    3. import android.support.design.widget.TabLayout;
    4. import android.support.v4.view.ViewPager;
    5. import android.support.v7.app.AppCompatActivity;
    6. import android.os.Bundle;
    7. import android.view.Menu;
    8. import android.view.MenuItem;
    9. import android.widget.Toolbar;
    10. import com.google.firebase.auth.FirebaseAuth;
    11. import com.google.firebase.auth.FirebaseUser;
    12. public class MainActivity extends AppCompatActivity {
    13. private FirebaseAuth mAuth;
    14. private android.support.v7.widget.Toolbar mToolbar;
    15. private ViewPager mViewPager;
    16. private SectionsPagerAdapter mSectionsPagerAdapter;
    17. private TabLayout mTabLayout;
    18. @Override
    19. protected void onCreate(Bundle savedInstanceState) {
    20. super.onCreate(savedInstanceState);
    21. setContentView(R.layout.activity_main);
    22. mAuth = FirebaseAuth.getInstance();
    23. mToolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.main_page_toolbar);
    24. setSupportActionBar(mToolbar);
    25. getSupportActionBar().setTitle("MFU");
    26. mViewPager = (ViewPager) findViewById(R.id. main_tabPager);
    27. mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
    28. mViewPager.setAdapter(mSectionsPagerAdapter);
    29. mTabLayout = findViewById(R.id. main_tabs);
    30. mTabLayout.setupWithViewPager(mViewPager);
    31. }
    32. @Override
    33. public void onStart() {
    34. super.onStart();
    35. // Check if user is signed in (non-null) and update UI accordingly.
    36. FirebaseUser currentUser = mAuth.getCurrentUser();
    37. if(currentUser == null)
    38. {
    39. sendToStart();
    40. }
    41. }
    42. private void sendToStart() {
    43. Intent startIntent = new Intent(MainActivity.this, StartActivity.class);
    44. startActivity(startIntent);
    45. finish();
    46. }
    47. @Override
    48. public boolean onCreateOptionsMenu(Menu menu) {
    49. super.onCreateOptionsMenu(menu);
    50. getMenuInflater().inflate(R.menu.main_menu, menu);
    51. return true;
    52. }
    53. @Override
    54. public boolean onOptionsItemSelected(MenuItem item) {
    55. super.onOptionsItemSelected(item);
    56. if (item.getItemId() == R.id.main_logout_btn);{
    57. FirebaseAuth.getInstance().signOut();
    58. sendToStart();
    59. }
    60. if (item.getItemId() == R.id. main_settings_btn){
    61. Intent settingsIntent = new Intent(MainActivity.this, SettingsActivity.class);
    62. startActivity(settingsIntent);
    63. }
    64. return true;
    65. }
    66. }
    Alles anzeigen
    Start Activity :

    Quellcode

    1. package com.dojoapps.mfu;
    2. import android.content.Intent;
    3. import android.support.v7.app.AppCompatActivity;
    4. import android.os.Bundle;
    5. import android.view.View;
    6. import android.widget.Button;
    7. public class StartActivity extends AppCompatActivity {
    8. private Button mRegBtn;
    9. private Button mLoginBtn;
    10. @Override
    11. protected void onCreate(Bundle savedInstanceState) {
    12. super.onCreate(savedInstanceState);
    13. setContentView(R.layout.activity_start);
    14. mRegBtn = (Button) findViewById(R.id.start_reg_btn);
    15. mLoginBtn = (Button) findViewById(R.id.start_login_btn);
    16. mLoginBtn.setOnClickListener(new View.OnClickListener() {
    17. @Override
    18. public void onClick(View v) {
    19. Intent log_intent = new Intent(StartActivity.this, LoginActivity.class);
    20. startActivity(log_intent);
    21. }
    22. });
    23. mRegBtn.setOnClickListener(new View.OnClickListener() {
    24. @Override
    25. public void onClick(View v) {
    26. Intent reg_intent = new Intent(StartActivity.this, RegisterActivity.class);
    27. startActivity(reg_intent);
    28. }
    29. });
    30. }
    31. }
    Alles anzeigen

    Register Activty :

    Java-Quellcode

    1. package com.dojoapps.mfu;
    2. import android.app.ProgressDialog;
    3. import android.content.Intent;
    4. import android.support.annotation.NonNull;
    5. import android.support.design.widget.TextInputLayout;
    6. import android.support.v7.app.AppCompatActivity;
    7. import android.os.Bundle;
    8. import android.support.v7.widget.Toolbar;
    9. import android.text.TextUtils;
    10. import android.view.View;
    11. import android.widget.Button;
    12. import android.widget.Toast;
    13. import com.google.android.gms.tasks.OnCompleteListener;
    14. import com.google.android.gms.tasks.Task;
    15. import com.google.firebase.auth.AuthResult;
    16. import com.google.firebase.auth.FirebaseAuth;
    17. import com.google.firebase.auth.FirebaseUser;
    18. import com.google.firebase.database.DatabaseReference;
    19. import com.google.firebase.database.FirebaseDatabase;
    20. import java.util.HashMap;
    21. public class RegisterActivity extends AppCompatActivity {
    22. private TextInputLayout mDisplayName;
    23. private TextInputLayout mEmail;
    24. private TextInputLayout mPassword;
    25. private Button mCreateButton;
    26. private Toolbar mToolbar;
    27. private ProgressDialog mRegProgress;
    28. private DatabaseReference mDatabase;
    29. // Firebase Auth
    30. private FirebaseAuth mAuth;
    31. @Override
    32. protected void onCreate(Bundle savedInstanceState) {
    33. super.onCreate(savedInstanceState);
    34. setContentView(R.layout.activity_register);
    35. mToolbar = (Toolbar) findViewById(R.id.register_toolbar);
    36. setSupportActionBar(mToolbar);
    37. getSupportActionBar().setTitle("Create Account");
    38. getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    39. mRegProgress = new ProgressDialog(this );
    40. // Firebase Auth
    41. mAuth = FirebaseAuth.getInstance();
    42. // Android Fields
    43. mDisplayName = (TextInputLayout) findViewById(R.id.reg_display_name);
    44. mEmail = (TextInputLayout) findViewById(R.id.reg_email);
    45. mPassword = (TextInputLayout) findViewById(R.id.reg_password);
    46. mCreateButton = (Button) findViewById(R.id.reg_create_btn);
    47. mCreateButton.setOnClickListener(new View.OnClickListener() {
    48. @Override
    49. public void onClick(View v) {
    50. String display_name = mDisplayName.getEditText().getText().toString();
    51. String email = mEmail.getEditText().getText().toString();
    52. String password = mPassword.getEditText().getText().toString();
    53. if (TextUtils.isEmpty(display_name) || TextUtils.isEmpty(email) || TextUtils.isEmpty(password)){
    54. Toast.makeText(RegisterActivity.this, "Please fill in all information", Toast.LENGTH_LONG).show();
    55. } else {
    56. mRegProgress.setTitle("Creating your Account");
    57. mRegProgress.setMessage("Please wait a second ...");
    58. mRegProgress.setCanceledOnTouchOutside(false);
    59. mRegProgress.show();
    60. register_user(display_name, email, password);
    61. }
    62. }
    63. });
    64. }
    65. private void register_user(final String display_name, final String email, String password) {
    66. mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
    67. @Override
    68. public void onComplete(@NonNull Task<AuthResult> task) {
    69. if(task.isSuccessful()){
    70. mAuth.getCurrentUser().sendEmailVerification()
    71. .addOnCompleteListener(new OnCompleteListener<Void>() {
    72. @Override
    73. public void onComplete(@NonNull Task<Void> task) {
    74. if (task.isSuccessful()) {
    75. Toast.makeText(RegisterActivity.this, "Verification Mail sent", Toast.LENGTH_LONG).show();
    76. }else {
    77. Toast.makeText(RegisterActivity.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show();
    78. }
    79. }
    80. });
    81. FirebaseUser current_user = FirebaseAuth.getInstance().getCurrentUser();
    82. String uid = current_user.getUid();
    83. mDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(uid);
    84. HashMap<String, String> userMap = new HashMap<>();
    85. userMap.put("name", display_name);
    86. userMap.put("status", "Hi there, I'm using MFU Chat App.");
    87. userMap.put("image","default");
    88. userMap.put("thumb_image", "default");
    89. mDatabase.setValue(userMap).addOnCompleteListener(new OnCompleteListener<Void>() {
    90. @Override
    91. public void onComplete(@NonNull Task<Void> task) {
    92. if(task.isSuccessful()){
    93. mRegProgress.dismiss();
    94. Intent mainIntent = new Intent(RegisterActivity.this, MainActivity.class);
    95. mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    96. startActivity(mainIntent);
    97. finish();
    98. }
    99. }
    100. });
    101. } else {
    102. mRegProgress.hide();
    103. Toast.makeText(RegisterActivity.this, "Cannot Create Account", Toast.LENGTH_LONG).show();
    104. }
    105. }
    106. });
    107. }
    108. }
    Alles anzeigen
  • sorry für Doppelpost aber die LogIn hat nicht mehr in den vorherigen Post gepasst:

    LogIn Acitivty:

    Quellcode

    1. package com.dojoapps.mfu;
    2. import android.app.ProgressDialog;
    3. import android.content.Intent;
    4. import android.support.annotation.NonNull;
    5. import android.support.design.widget.TextInputLayout;
    6. import android.support.v7.app.AppCompatActivity;
    7. import android.os.Bundle;
    8. import android.support.v7.widget.Toolbar;
    9. import android.support.v7.widget.ToolbarWidgetWrapper;
    10. import android.text.TextUtils;
    11. import android.view.View;
    12. import android.widget.Button;
    13. import android.widget.Toast;
    14. import com.google.android.gms.tasks.OnCompleteListener;
    15. import com.google.android.gms.tasks.Task;
    16. import com.google.firebase.auth.AuthResult;
    17. import com.google.firebase.auth.FirebaseAuth;
    18. public class LoginActivity extends AppCompatActivity {
    19. private Toolbar mToolbar;
    20. private TextInputLayout mLoginEmail;
    21. private TextInputLayout mLoginPassword;
    22. private FirebaseAuth mAuth;
    23. private Button mLogin_btn;
    24. private ProgressDialog mLoginProgress;
    25. @Override
    26. protected void onCreate(Bundle savedInstanceState) {
    27. super.onCreate(savedInstanceState);
    28. setContentView(R.layout.activity_login);
    29. mToolbar = (Toolbar) findViewById(R.id.login_toolbar);
    30. setSupportActionBar(mToolbar);
    31. getSupportActionBar().setTitle("LogIn");
    32. getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    33. mAuth = FirebaseAuth.getInstance();
    34. mLoginProgress = new ProgressDialog(this);
    35. mLoginEmail = (TextInputLayout) findViewById(R.id.login_email);
    36. mLoginPassword = (TextInputLayout) findViewById(R.id.login_password);
    37. mLogin_btn = (Button) findViewById(R.id.login_btn);
    38. mLogin_btn.setOnClickListener(new View.OnClickListener() {
    39. @Override
    40. public void onClick(View v) {
    41. String email = mLoginEmail.getEditText().getText().toString();
    42. String password = mLoginPassword.getEditText().getText().toString();
    43. if(!TextUtils.isEmpty(email) || !TextUtils.isEmpty(password)){
    44. mLoginProgress.setTitle("Logging in");
    45. mLoginProgress.setMessage("Please wait a second ...");
    46. mLoginProgress.setCanceledOnTouchOutside(false);
    47. mLoginProgress.show();
    48. loginUser(email, password);
    49. }
    50. }
    51. });
    52. }
    53. private void loginUser(String email, String password) {
    54. mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
    55. @Override
    56. public void onComplete(@NonNull Task<AuthResult> task) {
    57. if (task.isSuccessful()){
    58. mLoginProgress.dismiss();
    59. Intent mainIntent = new Intent(LoginActivity.this, MainActivity.class);
    60. mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    61. startActivity(mainIntent);
    62. finish();
    63. } else {
    64. mLoginProgress.hide();
    65. Toast.makeText(LoginActivity.this, "Cannot Sign In", Toast.LENGTH_LONG).show();
    66. }
    67. }
    68. });
    69. }
    70. }
    Alles anzeigen

    Die Email+PW Auth ist natürlich auch bei Firebase aktiviert ( ich denke auch richtig, sonst würde die Reg + der LogIn ja nicht funktionieren oder? )


    vorab schonmal wieder vielen Dank für eure Antworten:)

    Liebe Grüße
    Ebi
  • Hallo

    Also ich gehe mal davon aus das deine Registrierung korrekt abläuft.

    Und beim Login etwas schief geht.

    Wird den überhaupt der listner „onComplete“ aufgerufen?


    Normalerweise macht man bei so etwasen auch einen AuthStateListener() der in der onCrate erstellt und in der onStart gestartet und in der onstop beendet wird. Der überprüft ob ein User eingeloggt ist. Das kann ich bei dir weder in der login Activity noch in MainActivity erkennen.Denn nirgend wo wird geprüft ob jemand eingeloggt ist und wenn ja wird auch nicht ausgeloggt.Dafür ist der AuthStateListener() da.

    Quellcode

    1. public class LoginEmailActivity extends AppCompatActivity {
    2. EditText passwortfeld;
    3. EditText emailfeld;
    4. FirebaseAuth.AuthStateListener mAuthListener;
    5. FirebaseAuth mAuth;
    6. @Override
    7. protected void onCreate(Bundle savedInstanceState) {
    8. super.onCreate(savedInstanceState);
    9. setContentView(R.layout.activity_login_email);
    10. passwortfeld = (EditText) findViewById(R.id.editPass);
    11. emailfeld = (EditText) findViewById(R.id.editEmail);
    12. mAuth = FirebaseAuth.getInstance();
    13. mAuthListener = new FirebaseAuth.AuthStateListener() {
    14. @Override
    15. public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
    16. FirebaseUser user = firebaseAuth.getCurrentUser();
    17. if (user != null) {
    18. Intent i = new Intent(getApplicationContext(), MainActivity.class);
    19. startActivity(i);
    20. }
    21. }
    22. };
    23. }
    24. @Override
    25. public void onStart() {
    26. super.onStart();
    27. mAuth.addAuthStateListener(mAuthListener);
    28. }
    29. @Override
    30. public void onStop() {
    31. super.onStop();
    32. if (mAuthListener != null) {
    33. mAuth.removeAuthStateListener(mAuthListener);
    34. }
    35. }
    36. public void loginButton(View v){
    37. String email = emailfeld.getText().toString();
    38. String pass = passwortfeld.getText().toString();
    39. if(!email.isEmpty() || !pass.isEmpty()) {
    40. mAuth.signInWithEmailAndPassword(email, pass)
    41. .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
    42. @Override
    43. public void onComplete(@NonNull Task<AuthResult> task) {
    44. if (task.isSuccessful()) {
    45. Intent i = new Intent(getApplicationContext(), MainActivity.class);
    46. startActivity(i);
    47. } else {
    48. Toast.makeText(getApplicationContext(), "login Error", Toast.LENGTH_LONG).show();
    49. Log.i("login", "taskt " + task.getException());
    50. }
    51. }
    52. });
    53. }
    54. }
    55. }
    Alles anzeigen
    Ein Feedback auf Tipps ist auch schön. :P
  • Hallo,
    vielen Dank für die Antwort :)
    ich habe meine LogIn nun wie folgt ergänzt:

    Quellcode

    1. package com.dojoapps.mfu;
    2. import android.app.ProgressDialog;
    3. import android.content.Intent;
    4. import android.preference.EditTextPreference;
    5. import android.support.annotation.NonNull;
    6. import android.support.design.widget.TextInputLayout;
    7. import android.support.v7.app.AppCompatActivity;
    8. import android.os.Bundle;
    9. import android.support.v7.widget.Toolbar;
    10. import android.support.v7.widget.ToolbarWidgetWrapper;
    11. import android.text.TextUtils;
    12. import android.util.Log;
    13. import android.view.View;
    14. import android.widget.Button;
    15. import android.widget.EditText;
    16. import android.widget.Toast;
    17. import com.google.android.gms.tasks.OnCompleteListener;
    18. import com.google.android.gms.tasks.Task;
    19. import com.google.firebase.auth.AuthResult;
    20. import com.google.firebase.auth.FirebaseAuth;
    21. import com.google.firebase.auth.FirebaseUser;
    22. public class LoginActivity extends AppCompatActivity {
    23. EditText passwortfeld;
    24. EditText emailfeld;
    25. private Button mLogin_btn;
    26. private Toolbar mToolbar;
    27. private ProgressDialog mLoginProgress;
    28. FirebaseAuth.AuthStateListener mAuthListener;
    29. FirebaseAuth mAuth;
    30. private EditTextPreference mLoginEmail;
    31. @Override
    32. protected void onCreate(Bundle savedInstanceState) {
    33. super.onCreate(savedInstanceState);
    34. setContentView(R.layout.activity_login);
    35. mLoginProgress = new ProgressDialog(this);
    36. mToolbar = (Toolbar) findViewById(R.id.login_toolbar);
    37. setSupportActionBar(mToolbar);
    38. getSupportActionBar().setTitle("LogIn");
    39. getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    40. passwortfeld = (EditText) findViewById(R.id.login_password);
    41. emailfeld = (EditText) findViewById(R.id.login_email);
    42. mLogin_btn = (Button) findViewById(R.id.login_btn);
    43. mAuth = FirebaseAuth.getInstance();
    44. mLogin_btn.setOnClickListener(new View.OnClickListener() {
    45. @Override
    46. public void onClick(View v) {
    47. String email = emailfeld.getText().toString();
    48. String password = passwortfeld.getText().toString();
    49. if(!TextUtils.isEmpty(email) || !TextUtils.isEmpty(password)){
    50. mLoginProgress.setTitle("Logging in");
    51. mLoginProgress.setMessage("Please wait a second ...");
    52. mLoginProgress.setCanceledOnTouchOutside(false);
    53. mLoginProgress.show();
    54. loginButton(email, password);
    55. }
    56. }
    57. });
    58. mAuthListener = new FirebaseAuth.AuthStateListener() {
    59. @Override
    60. public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
    61. FirebaseUser user = firebaseAuth.getCurrentUser();
    62. if (user != null) {
    63. Intent i = new Intent(getApplicationContext(), MainActivity.class);
    64. startActivity(i);
    65. }
    66. }
    67. };
    68. }
    69. public void loginButton(String v, String password){
    70. String email = emailfeld.getText().toString();
    71. String pass = passwortfeld.getText().toString();
    72. if(!email.isEmpty() || !pass.isEmpty()) {
    73. mAuth.signInWithEmailAndPassword(email, pass)
    74. .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
    75. @Override
    76. public void onComplete(@NonNull Task<AuthResult> task) {
    77. if (task.isSuccessful()) {
    78. Intent i = new Intent(getApplicationContext(), MainActivity.class);
    79. startActivity(i);
    80. } else {
    81. Toast.makeText(getApplicationContext(), "login Error", Toast.LENGTH_LONG).show();
    82. Log.i("login", "taskt " + task.getException());
    83. }
    84. }
    85. });
    86. }
    87. }
    88. @Override
    89. public void onStart() {
    90. super.onStart();
    91. mAuth.addAuthStateListener(mAuthListener);
    92. }
    93. @Override
    94. public void onStop() {
    95. super.onStop();
    96. if (mAuthListener != null) {
    97. mAuth.removeAuthStateListener(mAuthListener);
    98. }
    99. }
    100. }
    Alles anzeigen
    bekomme aber leider immer noch den selben Fehler :(
    Hab ich noch etwas falsch gemacht?
    Vielen Dank im Voraus :)
    LG
    Ebi
  • eigentlich müsste es gehen.
    Frage welche Parameter variablen überträgst du an die Methode loginBoutton die beiten Variablen werden in der Methodegar nicht benutzt. Sondern edittext variablen. Ist denn auch der User und das Passwort was du an den listner übergibt auch in der firabase vorhanden.

    Es kann auch sein das du als ein anderer user eingelogt bist. Mache mal vorher ein layout. Es kann auch sein da deine firebase etwas durcheinander ist.

    Wie ist das hast du den listner auch in deiner minactivity?
    Ein Feedback auf Tipps ist auch schön. :P
  • Hallo,

    vielen Dank für deine Antwort und sorry dass meine Rückmeldung so spät kommt.
    Ich wollte jedoch erst einige Versuche starten bevor ich nochmals nachfrage.
    Also meiner Meinung nach liegt es daran, dass die MainActivity der SettingsActivity den CurrentUser nicht übergibt.
    Wenn ich die LogInActivit so ändere, dass ich nach dem Login nicht in der Main sondern direkt in der Settings lande, funktioniert alles.
    Hängt das mit dem Auth State Listener zusammen?
    Diesen habe ich bisher noch nicht in meiner Main.
    Ich wollte Ihn hinzufügen bin jedoch trotz stundenlanger Versuche immer wieder gescheitert.
    Meistens kam ein Loop dabei raus, welcher mich immer wieder von der Main in die Main schickt ^^
    Könnte mir evtl jemand direkt erklären, wie und wo ich den Auth Listener in der Main plazieren muss?

    Vielen Dank im Voraus.
    Liebe Grüße
    Ebi
  • Hallo normalerweise übergingen activity keine Parameter an eine andere das sind ich sage mal eigenständige Einheiten. Wenn du in der Mainactivity auf dasAut Objekt zugreifen willst würde ich es dort auch erstelle und auch den listner dort erstellen. Damit du auch in der Main eine änderung mitbekommst.

    Da activitys eigene Einheiten sind kannst du nicht ohne weiteres auf variablen einer anderen zugreifen. Ausnahme globale static Variablen.
    Ein Feedback auf Tipps ist auch schön. :P
  • guten Morgen,

    Vielen vielen Dank für deine erneute Antwort.
    Ich hab mir schon gedacht , dass ich den AuthListener auch in der Main einbauen muss ich komm nur iwie nicht drauf wie 8|
    In der LogIn ist er ja an den LogIn Button geknüpft ich habe in der Main aber ja an sich keinen Button der zu Settings führt sondern nur das MenuItem.
    Kannst du mir vllt kurz erklären , wie ich den Listener ohne Button Verknüpfung einbaue?
    Ich kriegs leider nicht hin :/

    Und dass die Variablen nicht an die andere klasse übergeben werden dachte ich mir auch schon mich hat es nur gewundert dass ich , wenn ich die logIn so ändere dass ich nach dem Klick auf den login Button nicht in der Main lande sondern in der Settings, alles funktioniert, auch ohne einen weiteren Listener , woran liegt das denn dann?

    Liebe Grüße
    Ebi
  • Hallo eigentlich habe ich dir schon in Post 8 gezeigt wie den authstatelistner benutzen kannst.
    Auch in der mainactivty gibt es eine onCreate .

    Quellcode

    1. FirebaseAuth.AuthStateListener mAuthListener = new FirebaseAuth.AuthStateListener() {
    2. @Override
    3. public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
    4. FirebaseUser user = firebaseAuth.getCurrentUser();
    5. if (user != null) {
    6. Intent i = new Intent(getApplicationContext(), MainActivity.class);
    7. startActivity(i);
    8. }
    9. }
    10. };
    Du bindest den listner nicht an einen Button sondern erstellst einen neuen in der oncrate.

    Wenn Du noch nicht klar kommst dann poste nochmal deinen aktuellen Code.
    Ein Feedback auf Tipps ist auch schön. :P
  • wieder vielen Dank.
    Hab den Listener in die Main gepackt wie du s gepostet hat.
    Hier meine Main:

    Quellcode

    1. package com.dojoapps.mfu;
    2. import android.content.Intent;
    3. import android.support.design.widget.TabLayout;
    4. import android.support.v4.view.ViewPager;
    5. import android.support.v7.app.AppCompatActivity;
    6. import android.os.Bundle;
    7. import android.view.Menu;
    8. import android.view.MenuItem;
    9. import android.widget.Toolbar;
    10. import com.google.firebase.auth.FirebaseAuth;
    11. import com.google.firebase.auth.FirebaseUser;
    12. import android.widget.TextView;
    13. import android.util.Log;
    14. import android.support.annotation.NonNull;
    15. public class MainActivity extends AppCompatActivity {
    16. private FirebaseAuth mAuth;
    17. private android.support.v7.widget.Toolbar mToolbar;
    18. private ViewPager mViewPager;
    19. private SectionsPagerAdapter mSectionsPagerAdapter;
    20. private TabLayout mTabLayout;
    21. @Override
    22. protected void onCreate(Bundle savedInstanceState) {
    23. super.onCreate(savedInstanceState);
    24. setContentView(R.layout.activity_main);
    25. mAuth = FirebaseAuth.getInstance();
    26. mToolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.main_page_toolbar);
    27. setSupportActionBar(mToolbar);
    28. getSupportActionBar().setTitle("MFU");
    29. mViewPager = (ViewPager) findViewById(R.id. main_tabPager);
    30. mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
    31. mViewPager.setAdapter(mSectionsPagerAdapter);
    32. mTabLayout = findViewById(R.id. main_tabs);
    33. mTabLayout.setupWithViewPager(mViewPager);
    34. FirebaseAuth.AuthStateListener mAuthListener = new FirebaseAuth.AuthStateListener() {
    35. @Override
    36. public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
    37. FirebaseUser user = firebaseAuth.getCurrentUser();
    38. if (user != null) {
    39. Intent i = new Intent(getApplicationContext(), MainActivity.class);
    40. startActivity(i);
    41. }
    42. }
    43. };
    44. }
    45. private void sendToStart() {
    46. Intent startIntent = new Intent(MainActivity.this, StartActivity.class);
    47. startActivity(startIntent);
    48. finish();
    49. }
    50. @Override
    51. public boolean onCreateOptionsMenu(Menu menu) {
    52. super.onCreateOptionsMenu(menu);
    53. getMenuInflater().inflate(R.menu.main_menu, menu);
    54. return true;
    55. }
    56. @Override
    57. public boolean onOptionsItemSelected(MenuItem item) {
    58. super.onOptionsItemSelected(item);
    59. if (item.getItemId() == R.id.main_logout_btn);{
    60. FirebaseAuth.getInstance().signOut();
    61. sendToStart();
    62. }
    63. if (item.getItemId() == R.id.main_settings_btn){
    64. Intent settingsIntent = new Intent(MainActivity.this, SettingsActivity.class);
    65. startActivity(settingsIntent);
    66. }
    67. return true;
    68. }
    69. }
    Alles anzeigen


    und hier meine Settings:

    Quellcode

    1. package com.dojoapps.mfu;
    2. import android.content.Intent;
    3. import android.support.annotation.NonNull;
    4. import android.support.v7.app.AppCompatActivity;
    5. import android.os.Bundle;
    6. import android.util.Log;
    7. import android.widget.TextView;
    8. import android.widget.Toast;
    9. import com.google.firebase.auth.FirebaseAuth;
    10. import com.google.firebase.auth.FirebaseUser;
    11. import com.google.firebase.database.DataSnapshot;
    12. import com.google.firebase.database.DatabaseError;
    13. import com.google.firebase.database.DatabaseReference;
    14. import com.google.firebase.database.FirebaseDatabase;
    15. import com.google.firebase.database.ValueEventListener;
    16. import org.w3c.dom.Text;
    17. import de.hdodenhof.circleimageview.CircleImageView;
    18. public class SettingsActivity extends AppCompatActivity {
    19. private DatabaseReference mUserDatabase;
    20. private FirebaseUser mCurrentUser;
    21. private CircleImageView mDisplayImage;
    22. private TextView mName;
    23. private TextView mStatus;
    24. @Override
    25. protected void onCreate(Bundle savedInstanceState) {
    26. super.onCreate(savedInstanceState);
    27. setContentView(R.layout.activity_settings);
    28. mDisplayImage = findViewById(R.id.settings_image);
    29. mName = findViewById(R.id.settings_display_name);
    30. mStatus = findViewById(R.id.settings_status);
    31. mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
    32. if(mCurrentUser != null) {
    33. String current_uid = mCurrentUser.getUid();
    34. mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(current_uid);
    35. mUserDatabase.addValueEventListener(new ValueEventListener() {
    36. @Override
    37. public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    38. String name = dataSnapshot.child("name").getValue().toString();
    39. //String image = dataSnapshot.child("image").getValue().toString();
    40. String status = dataSnapshot.child("status").getValue().toString();
    41. //String thumb_image = dataSnapshot.child("thumb image").getValue().toString();
    42. mName.setText(name);
    43. mStatus.setText(status);
    44. }
    45. @Override
    46. public void onCancelled(DatabaseError databaseError) {
    47. }
    48. }
    49. );
    50. }
    51. }
    52. }
    Alles anzeigen
    Durch meine if(mCurrentUser != null) { ... in der Settings bekomme ich zwar kein Null Exception mehr und er macht die Settings Page auf aber er aktualisiert die Daten nicht sprich der User = Null.

    Ich bin echt am verzweifeln xD vielen Dank für deine Hilfe !!!
    Liebe Grüße
  • sorry doof von mir natürlich ich hab den Listener ja gar nie aufgerufen ... hier die geänderte Main:

    Quellcode

    1. package com.dojoapps.mfu;
    2. import android.content.Intent;
    3. import android.support.design.widget.TabLayout;
    4. import android.support.v4.view.ViewPager;
    5. import android.support.v7.app.AppCompatActivity;
    6. import android.os.Bundle;
    7. import android.view.Menu;
    8. import android.view.MenuItem;
    9. import android.widget.Toolbar;
    10. import com.google.firebase.auth.FirebaseAuth;
    11. import com.google.firebase.auth.FirebaseUser;
    12. import android.widget.TextView;
    13. import android.util.Log;
    14. import android.support.annotation.NonNull;
    15. public class MainActivity extends AppCompatActivity {
    16. private FirebaseAuth mAuth;
    17. private android.support.v7.widget.Toolbar mToolbar;
    18. private ViewPager mViewPager;
    19. private SectionsPagerAdapter mSectionsPagerAdapter;
    20. private TabLayout mTabLayout;
    21. @Override
    22. protected void onCreate(Bundle savedInstanceState) {
    23. super.onCreate(savedInstanceState);
    24. setContentView(R.layout.activity_main);
    25. mAuth = FirebaseAuth.getInstance();
    26. mToolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.main_page_toolbar);
    27. setSupportActionBar(mToolbar);
    28. getSupportActionBar().setTitle("MFU");
    29. mViewPager = (ViewPager) findViewById(R.id. main_tabPager);
    30. mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
    31. mViewPager.setAdapter(mSectionsPagerAdapter);
    32. mTabLayout = findViewById(R.id. main_tabs);
    33. mTabLayout.setupWithViewPager(mViewPager);
    34. }
    35. FirebaseAuth.AuthStateListener mAuthListener = new FirebaseAuth.AuthStateListener() {
    36. @Override
    37. public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
    38. FirebaseUser user = firebaseAuth.getCurrentUser();
    39. if (user != null) {
    40. Intent i = new Intent(getApplicationContext(), MainActivity.class);
    41. startActivity(i);
    42. }
    43. }
    44. };
    45. @Override
    46. public void onStart() {
    47. super.onStart();
    48. mAuth.addAuthStateListener(mAuthListener);
    49. }
    50. @Override
    51. public void onStop() {
    52. super.onStop();
    53. if (mAuthListener != null) {
    54. mAuth.removeAuthStateListener(mAuthListener);
    55. }
    56. }
    57. private void sendToStart() {
    58. Intent startIntent = new Intent(MainActivity.this, StartActivity.class);
    59. startActivity(startIntent);
    60. finish();
    61. }
    62. @Override
    63. public boolean onCreateOptionsMenu(Menu menu) {
    64. super.onCreateOptionsMenu(menu);
    65. getMenuInflater().inflate(R.menu.main_menu, menu);
    66. return true;
    67. }
    68. @Override
    69. public boolean onOptionsItemSelected(MenuItem item) {
    70. super.onOptionsItemSelected(item);
    71. if (item.getItemId() == R.id.main_logout_btn);{
    72. FirebaseAuth.getInstance().signOut();
    73. sendToStart();
    74. }
    75. if (item.getItemId() == R.id.main_settings_btn){
    76. Intent settingsIntent = new Intent(MainActivity.this, SettingsActivity.class);
    77. startActivity(settingsIntent);
    78. }
    79. return true;
    80. }
    81. }
    Alles anzeigen
    hier habe ich jetzt wieder den Loop der mich immer wieder von Main zu Main schickt heißt auch hier scheint der User = null zu sein oder?
  • Hi also dein listner solltest du global erstellen im Klassenrumf und nicht lokal in der oncreate. Die mAuthListener variable in der oncreate ist nicht in der onStart sichtbar.

    Schaue dir noch mal mein post 8 an.
    Du solltest dir das mit
    Lokalen und globalen Klassen Variablen in Java nochmal abschauen.

    In der onStart wo du den listner auf die mAuth variable setzt hast du wenn du keine globale variable machst eignetlich gar keine. Mach es wie in Post 8.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jogimuc ()

  • Hallo,

    vielen Dank nochmals für deine Hilfe.
    Wir haben das mit dem StateListener einfach nicht hinbekommen.
    Wir haben das Problem dann über eine andere Methode gelöst.
    Dennoch nochmals vielen Dank für deine Bemühungen, mal sehen ob ich im weiteren Verlauf mit noch mehr Problemen zu kämpfen habe :D
    Liebe Grüße
    Ebi