habe separate Text watcher gemacht jetzt funzt es danke
Beiträge von Ebi
-
-
okay danke für den Tipp jedoch wenn ich in XML die edittexte auf 0 setze steht überall 0 drin oder lässt sich das vermeiden ? sorry für meine dummen Fragen xD
-
Hallo nochmals
Ich häng die class mal als Txt an vllt kannst du dann alles anschauen und sehen woran es liegt und weißt dann vllt auch was ich meine mit den ewig vielen Eingaben die edit Text sind auf number und maximal 3 stellen begrenzt.
Lg und nochmals danke im voraus -
huhu
Vielen vielen Dank schon mal für deine Antwort:)
ja sind alles edittext und Standard mäßig leer .... es funktioniert ja aber eben erst wenn ich bei Spieler1Einsen anfange ... wenn ich den ersten Eintrag bei spieler1Zweier mach setzt er summe = 0 ... wenn ich dann bei Spieler1Einser was eintrage dann fängt er an zusammen zu zählen ... für jeden edittext nen eigenen watcher ? Bei ca 130 edittext Feldern etwas viel oder? gibt s denn ne andere Funktion die "live" die Eintragungen in den edittexten registriert und dann zusammen rechnet? Ich habe nichts gefunden bisher -
wiederum nur ein Ausschnitt wegen begrenzung
-
Hallo liebe Community
Ich bin bei meiner "neuen App" ( ein kniffel block )auf ein kleines Problem gestoßen und zwar habe ich eine Tabelle erstellt , die automatisch nach ( zeitgleich zur ) Befüllung ein Ergebnis berechnen soll ... ich habe das ganze per TextWatch soweit auch hin bekommen nur habe ich das Problem dass das ganze nur funktioniert wenn ich Feld 1 befüllt habe... fange ich zB bei Feld 2 an spuckt er mir das Ergebnis 0 aus ...
Als Antwort wegen Zeichen Begrenzung meine class vllt kann mir ja jemand helfenVielen Dank im Voraus
Ebi -
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
Liebe Grüße
Ebi -
sorry doof von mir natürlich ich hab den Listener ja gar nie aufgerufen ... hier die geänderte Main:
Code
Alles anzeigenpackage com.dojoapps.mfu; import android.content.Intent; import android.support.design.widget.TabLayout; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.Toolbar; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; import android.widget.TextView; import android.util.Log; import android.support.annotation.NonNull; public class MainActivity extends AppCompatActivity { private FirebaseAuth mAuth; private android.support.v7.widget.Toolbar mToolbar; private ViewPager mViewPager; private SectionsPagerAdapter mSectionsPagerAdapter; private TabLayout mTabLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mAuth = FirebaseAuth.getInstance(); mToolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.main_page_toolbar); setSupportActionBar(mToolbar); getSupportActionBar().setTitle("MFU"); mViewPager = (ViewPager) findViewById(R.id. main_tabPager); mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); mViewPager.setAdapter(mSectionsPagerAdapter); mTabLayout = findViewById(R.id. main_tabs); mTabLayout.setupWithViewPager(mViewPager); } FirebaseAuth.AuthStateListener mAuthListener = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = firebaseAuth.getCurrentUser(); if (user != null) { Intent i = new Intent(getApplicationContext(), MainActivity.class); startActivity(i); } } }; @Override public void onStart() { super.onStart(); mAuth.addAuthStateListener(mAuthListener); } @Override public void onStop() { super.onStop(); if (mAuthListener != null) { mAuth.removeAuthStateListener(mAuthListener); } } private void sendToStart() { Intent startIntent = new Intent(MainActivity.this, StartActivity.class); startActivity(startIntent); finish(); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.main_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { super.onOptionsItemSelected(item); if (item.getItemId() == R.id.main_logout_btn);{ FirebaseAuth.getInstance().signOut(); sendToStart(); } if (item.getItemId() == R.id.main_settings_btn){ Intent settingsIntent = new Intent(MainActivity.this, SettingsActivity.class); startActivity(settingsIntent); } return true; } }
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?
-
wieder vielen Dank.
Hab den Listener in die Main gepackt wie du s gepostet hat.
Hier meine Main:Code
Alles anzeigenpackage com.dojoapps.mfu; import android.content.Intent; import android.support.design.widget.TabLayout; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.Toolbar; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; import android.widget.TextView; import android.util.Log; import android.support.annotation.NonNull; public class MainActivity extends AppCompatActivity { private FirebaseAuth mAuth; private android.support.v7.widget.Toolbar mToolbar; private ViewPager mViewPager; private SectionsPagerAdapter mSectionsPagerAdapter; private TabLayout mTabLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mAuth = FirebaseAuth.getInstance(); mToolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.main_page_toolbar); setSupportActionBar(mToolbar); getSupportActionBar().setTitle("MFU"); mViewPager = (ViewPager) findViewById(R.id. main_tabPager); mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); mViewPager.setAdapter(mSectionsPagerAdapter); mTabLayout = findViewById(R.id. main_tabs); mTabLayout.setupWithViewPager(mViewPager); FirebaseAuth.AuthStateListener mAuthListener = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = firebaseAuth.getCurrentUser(); if (user != null) { Intent i = new Intent(getApplicationContext(), MainActivity.class); startActivity(i); } } }; } private void sendToStart() { Intent startIntent = new Intent(MainActivity.this, StartActivity.class); startActivity(startIntent); finish(); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.main_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { super.onOptionsItemSelected(item); if (item.getItemId() == R.id.main_logout_btn);{ FirebaseAuth.getInstance().signOut(); sendToStart(); } if (item.getItemId() == R.id.main_settings_btn){ Intent settingsIntent = new Intent(MainActivity.this, SettingsActivity.class); startActivity(settingsIntent); } return true; } }
und hier meine Settings:
Code
Alles anzeigenpackage com.dojoapps.mfu; import android.content.Intent; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import android.widget.Toast; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; 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 org.w3c.dom.Text; import de.hdodenhof.circleimageview.CircleImageView; public class SettingsActivity extends AppCompatActivity { private DatabaseReference mUserDatabase; private FirebaseUser mCurrentUser; private CircleImageView mDisplayImage; private TextView mName; private TextView mStatus; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_settings); mDisplayImage = findViewById(R.id.settings_image); mName = findViewById(R.id.settings_display_name); mStatus = findViewById(R.id.settings_status); mCurrentUser = FirebaseAuth.getInstance().getCurrentUser(); if(mCurrentUser != null) { String current_uid = mCurrentUser.getUid(); mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(current_uid); mUserDatabase.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { String name = dataSnapshot.child("name").getValue().toString(); //String image = dataSnapshot.child("image").getValue().toString(); String status = dataSnapshot.child("status").getValue().toString(); //String thumb_image = dataSnapshot.child("thumb image").getValue().toString(); mName.setText(name); mStatus.setText(status); } @Override public void onCancelled(DatabaseError databaseError) { } } ); } } }
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 -
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
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 hinUnd 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,
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,
vielen Dank für die Antwort
ich habe meine LogIn nun wie folgt ergänzt:Code
Alles anzeigenpackage com.dojoapps.mfu; import android.app.ProgressDialog; import android.content.Intent; import android.preference.EditTextPreference; import android.support.annotation.NonNull; import android.support.design.widget.TextInputLayout; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.support.v7.widget.ToolbarWidgetWrapper; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; 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 { EditText passwortfeld; EditText emailfeld; private Button mLogin_btn; private Toolbar mToolbar; private ProgressDialog mLoginProgress; FirebaseAuth.AuthStateListener mAuthListener; FirebaseAuth mAuth; private EditTextPreference mLoginEmail; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); mLoginProgress = new ProgressDialog(this); mToolbar = (Toolbar) findViewById(R.id.login_toolbar); setSupportActionBar(mToolbar); getSupportActionBar().setTitle("LogIn"); getSupportActionBar().setDisplayHomeAsUpEnabled(true); passwortfeld = (EditText) findViewById(R.id.login_password); emailfeld = (EditText) findViewById(R.id.login_email); mLogin_btn = (Button) findViewById(R.id.login_btn); mAuth = FirebaseAuth.getInstance(); mLogin_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String email = emailfeld.getText().toString(); String password = passwortfeld.getText().toString(); if(!TextUtils.isEmpty(email) || !TextUtils.isEmpty(password)){ mLoginProgress.setTitle("Logging in"); mLoginProgress.setMessage("Please wait a second ..."); mLoginProgress.setCanceledOnTouchOutside(false); mLoginProgress.show(); loginButton(email, password); } } }); mAuthListener = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = firebaseAuth.getCurrentUser(); if (user != null) { Intent i = new Intent(getApplicationContext(), MainActivity.class); startActivity(i); } } }; } public void loginButton(String v, String password){ String email = emailfeld.getText().toString(); String pass = passwortfeld.getText().toString(); if(!email.isEmpty() || !pass.isEmpty()) { mAuth.signInWithEmailAndPassword(email, pass) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { Intent i = new Intent(getApplicationContext(), MainActivity.class); startActivity(i); } else { Toast.makeText(getApplicationContext(), "login Error", Toast.LENGTH_LONG).show(); Log.i("login", "taskt " + task.getException()); } } }); } } @Override public void onStart() { super.onStart(); mAuth.addAuthStateListener(mAuthListener); } @Override public void onStop() { super.onStop(); if (mAuthListener != null) { mAuth.removeAuthStateListener(mAuthListener); } } }
bekomme aber leider immer noch den selben Fehler
Hab ich noch etwas falsch gemacht?
Vielen Dank im Voraus
LG
Ebi -
sorry für Doppelpost aber die LogIn hat nicht mehr in den vorherigen Post gepasst:
LogIn Acitivty:
Code
Alles anzeigenpackage com.dojoapps.mfu; import android.app.ProgressDialog; import android.content.Intent; import android.support.annotation.NonNull; import android.support.design.widget.TextInputLayout; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.support.v7.widget.ToolbarWidgetWrapper; import android.text.TextUtils; import android.view.View; import android.widget.Button; 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; public class LoginActivity extends AppCompatActivity { private Toolbar mToolbar; private TextInputLayout mLoginEmail; private TextInputLayout mLoginPassword; private FirebaseAuth mAuth; private Button mLogin_btn; private ProgressDialog mLoginProgress; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); mToolbar = (Toolbar) findViewById(R.id.login_toolbar); setSupportActionBar(mToolbar); getSupportActionBar().setTitle("LogIn"); getSupportActionBar().setDisplayHomeAsUpEnabled(true); mAuth = FirebaseAuth.getInstance(); mLoginProgress = new ProgressDialog(this); mLoginEmail = (TextInputLayout) findViewById(R.id.login_email); mLoginPassword = (TextInputLayout) findViewById(R.id.login_password); mLogin_btn = (Button) findViewById(R.id.login_btn); mLogin_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String email = mLoginEmail.getEditText().getText().toString(); String password = mLoginPassword.getEditText().getText().toString(); if(!TextUtils.isEmpty(email) || !TextUtils.isEmpty(password)){ mLoginProgress.setTitle("Logging in"); mLoginProgress.setMessage("Please wait a second ..."); mLoginProgress.setCanceledOnTouchOutside(false); mLoginProgress.show(); loginUser(email, password); } } }); } private void loginUser(String email, String password) { mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()){ mLoginProgress.dismiss(); Intent mainIntent = new Intent(LoginActivity.this, MainActivity.class); mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(mainIntent); finish(); } else { mLoginProgress.hide(); Toast.makeText(LoginActivity.this, "Cannot Sign In", Toast.LENGTH_LONG).show(); } } }); } }
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 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 verzweifelnMain Activity:
Code
Alles anzeigenpackage com.dojoapps.mfu; import android.content.Intent; import android.support.design.widget.TabLayout; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.Toolbar; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; public class MainActivity extends AppCompatActivity { private FirebaseAuth mAuth; private android.support.v7.widget.Toolbar mToolbar; private ViewPager mViewPager; private SectionsPagerAdapter mSectionsPagerAdapter; private TabLayout mTabLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mAuth = FirebaseAuth.getInstance(); mToolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.main_page_toolbar); setSupportActionBar(mToolbar); getSupportActionBar().setTitle("MFU"); mViewPager = (ViewPager) findViewById(R.id. main_tabPager); mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); mViewPager.setAdapter(mSectionsPagerAdapter); mTabLayout = findViewById(R.id. main_tabs); mTabLayout.setupWithViewPager(mViewPager); } @Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); if(currentUser == null) { sendToStart(); } } private void sendToStart() { Intent startIntent = new Intent(MainActivity.this, StartActivity.class); startActivity(startIntent); finish(); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.main_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { super.onOptionsItemSelected(item); if (item.getItemId() == R.id.main_logout_btn);{ FirebaseAuth.getInstance().signOut(); sendToStart(); } if (item.getItemId() == R.id. main_settings_btn){ Intent settingsIntent = new Intent(MainActivity.this, SettingsActivity.class); startActivity(settingsIntent); } return true; } }
Start Activity :
Code
Alles anzeigenpackage com.dojoapps.mfu; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class StartActivity extends AppCompatActivity { private Button mRegBtn; private Button mLoginBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_start); mRegBtn = (Button) findViewById(R.id.start_reg_btn); mLoginBtn = (Button) findViewById(R.id.start_login_btn); mLoginBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent log_intent = new Intent(StartActivity.this, LoginActivity.class); startActivity(log_intent); } }); mRegBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent reg_intent = new Intent(StartActivity.this, RegisterActivity.class); startActivity(reg_intent); } }); } }
Register Activty :Java
Alles anzeigenpackage com.dojoapps.mfu; import android.app.ProgressDialog; import android.content.Intent; import android.support.annotation.NonNull; import android.support.design.widget.TextInputLayout; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.View; import android.widget.Button; 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; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import java.util.HashMap; public class RegisterActivity extends AppCompatActivity { private TextInputLayout mDisplayName; private TextInputLayout mEmail; private TextInputLayout mPassword; private Button mCreateButton; private Toolbar mToolbar; private ProgressDialog mRegProgress; private DatabaseReference mDatabase; // Firebase Auth private FirebaseAuth mAuth; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); mToolbar = (Toolbar) findViewById(R.id.register_toolbar); setSupportActionBar(mToolbar); getSupportActionBar().setTitle("Create Account"); getSupportActionBar().setDisplayHomeAsUpEnabled(true); mRegProgress = new ProgressDialog(this ); // Firebase Auth mAuth = FirebaseAuth.getInstance(); // Android Fields mDisplayName = (TextInputLayout) findViewById(R.id.reg_display_name); mEmail = (TextInputLayout) findViewById(R.id.reg_email); mPassword = (TextInputLayout) findViewById(R.id.reg_password); mCreateButton = (Button) findViewById(R.id.reg_create_btn); mCreateButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String display_name = mDisplayName.getEditText().getText().toString(); String email = mEmail.getEditText().getText().toString(); String password = mPassword.getEditText().getText().toString(); if (TextUtils.isEmpty(display_name) || TextUtils.isEmpty(email) || TextUtils.isEmpty(password)){ Toast.makeText(RegisterActivity.this, "Please fill in all information", Toast.LENGTH_LONG).show(); } else { mRegProgress.setTitle("Creating your Account"); mRegProgress.setMessage("Please wait a second ..."); mRegProgress.setCanceledOnTouchOutside(false); mRegProgress.show(); register_user(display_name, email, password); } } }); } private void register_user(final String display_name, final String email, String password) { mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if(task.isSuccessful()){ mAuth.getCurrentUser().sendEmailVerification() .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Toast.makeText(RegisterActivity.this, "Verification Mail sent", Toast.LENGTH_LONG).show(); }else { Toast.makeText(RegisterActivity.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show(); } } }); FirebaseUser current_user = FirebaseAuth.getInstance().getCurrentUser(); String uid = current_user.getUid(); mDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(uid); HashMap<String, String> userMap = new HashMap<>(); userMap.put("name", display_name); userMap.put("status", "Hi there, I'm using MFU Chat App."); userMap.put("image","default"); userMap.put("thumb_image", "default"); mDatabase.setValue(userMap).addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if(task.isSuccessful()){ mRegProgress.dismiss(); Intent mainIntent = new Intent(RegisterActivity.this, MainActivity.class); mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(mainIntent); finish(); } } }); } else { mRegProgress.hide(); Toast.makeText(RegisterActivity.this, "Cannot Create Account", Toast.LENGTH_LONG).show(); } } }); } }
-
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 :Code
Alles anzeigenAndroidRuntime: FATAL EXCEPTION: main Process: com.dojoapps.mfu, PID: 10066 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 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6669) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.google.firebase.auth.FirebaseUser.getUid()' on a null object reference at com.dojoapps.mfu.SettingsActivity.onCreate(SettingsActivity.java:51) at android.app.Activity.performCreate(Activity.java:7136) at android.app.Activity.performCreate(Activity.java:7127) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6669) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) I/Process: Sending signal. PID: 10066 SIG: 9 Application terminated.
Hier meine SettingsActivity:
Code
Alles anzeigenpackage com.dojoapps.mfu; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; import android.widget.Toast; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; 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 org.w3c.dom.Text; import de.hdodenhof.circleimageview.CircleImageView; public class SettingsActivity extends AppCompatActivity { private DatabaseReference mUserDatabase; private FirebaseUser mCurrentUser; private CircleImageView mDisplayImage; private TextView mName; private TextView mStatus; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_settings); mDisplayImage = (CircleImageView) findViewById(R.id. settings_image); mName = (TextView) findViewById(R.id. settings_display_name); mStatus = (TextView) findViewById(R.id. settings_status); mCurrentUser = FirebaseAuth.getInstance().getCurrentUser(); FirebaseDatabase.getInstance().getReference(); String current_uid = mCurrentUser.getUid(); mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(current_uid); mUserDatabase.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { String name = dataSnapshot.child("name").getValue().toString(); String image = dataSnapshot.child("image").getValue().toString(); String status = dataSnapshot.child("status").getValue().toString(); String thumb_image = dataSnapshot.child("thumb image").getValue().toString(); mName.setText(name); mStatus.setText(status); } @Override public void onCancelled(DatabaseError databaseError) { } }); } }
Und hier meine FireBase Datenbank Struktur :Codemfumessageforyou Users 0f1swOIAXGZyq8KwKnKOPHdZu6K2 image: "default" name: "445566988" status: "Hi there, I'm using MFU Chat App." 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