如果使用Firebase简单用户名和密码身份验证,如何返回用户列表

如果使用Firebase简单用户名和密码身份验证,如何返回用户列表

不确定我是否做错了什么,但是使用这个apihttps:/www.Firebase.com/docs/security/简易-登录-电子邮件-password.html我可以根据返回消息成功地创建一个用户,但是在Forge控制台的任何地方都看不到该用户。您如何知道哪些用户已注册?

我应该使用返回的用户ID并在Firebase中创建自己的用户对象,还是没有必要重复。我确实需要添加一些额外的用户属性,所以可能无论如何我都需要这样做。


大话西游666
浏览 1091回答 3
3回答

拉莫斯之舞

在Firebase身份验证(以前称为Firebase SimpleLogin)中使用电子邮件/密码身份验证时,您的用户的电子邮件和密码组合将安全地与实际存储在FireBase中的数据分开存储。您的FireBase中的数据与用户的电子邮件/密码哈希组合之间的这一障碍是由设计造成的:我们希望使您更容易开发应用程序,(2)防止任何意外的用户凭据泄漏,(3)在如何在FireBase中存储用户数据方面仍然给予您完全的灵活性。这意味着我们只存储电子邮件地址/密码哈希组合,而没有其他任何内容,因此您需要决定如何在FireBase中存储实际的用户数据。正如您所建议的,您应该获取用户ID,并将该数据存储在Firebase中的一个位置,如/user/$id,并使用Firebase安全规则语言以确定对该数据的读/写访问权限。你的用户是独一无二的id和email已经在auth在编写规则时使用的变量。

三国纷争

在这里,我创建了一个Android程序来执行Rob对Firebase初学者(像我一样)说的话。这个程序首先存储登录用户的用户名,然后在listView中显示它们。SignInActivity.javapublic&nbsp;class&nbsp;SignInActivity&nbsp;extends&nbsp;BaseActivity&nbsp;implements&nbsp;View.OnClickListener,View.OnKeyListener{ private&nbsp;DatabaseReference&nbsp;mDatabase; public&nbsp;static&nbsp;FirebaseAuth&nbsp;mAuth; private&nbsp;static&nbsp;final&nbsp;String&nbsp;TAG&nbsp;=&nbsp;"MainActivity"; EditText&nbsp;usernameField; EditText&nbsp;passwordField; TextView&nbsp;changeSignUpModeTextView; Button&nbsp;signUpButton; ImageView&nbsp;logo; RelativeLayout&nbsp;relativeLayout; Boolean&nbsp;signUpModeActive; static&nbsp;ArrayList<String>&nbsp;userList&nbsp;=&nbsp;new&nbsp;ArrayList<>(); @Override public&nbsp;void&nbsp;onStart()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;super.onStart(); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Check&nbsp;auth&nbsp;on&nbsp;Activity&nbsp;start &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(mAuth.getCurrentUser()&nbsp;!=&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onAuthSuccess(mAuth.getCurrentUser()); &nbsp;&nbsp;&nbsp;&nbsp;} } @Override public&nbsp;boolean&nbsp;onKey(View&nbsp;view,&nbsp;int&nbsp;i,&nbsp;KeyEvent&nbsp;keyEvent)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if(i&nbsp;==&nbsp;keyEvent.KEYCODE_ENTER&nbsp;&&&nbsp;keyEvent.getAction()&nbsp;==&nbsp;keyEvent.ACTION_DOWN){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signUpOrLogIn(view); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false; } @Override public&nbsp;void&nbsp;onClick(View&nbsp;view)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if(view.getId()&nbsp;==&nbsp;R.id.changeSignUpMode){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(signUpModeActive&nbsp;==&nbsp;true){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signUpModeActive&nbsp;=&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changeSignUpModeTextView.setText("Sign&nbsp;Up"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signUpButton.setText("Log&nbsp;In"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signUpModeActive&nbsp;=&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changeSignUpModeTextView.setText("Log&nbsp;In"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signUpButton.setText("Sign&nbsp;Up"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}else&nbsp;if(view.getId()&nbsp;==&nbsp;R.id.logo&nbsp;||&nbsp;view.getId()&nbsp;==&nbsp;R.id.relativeLayout){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputMethodManager&nbsp;inm&nbsp;=&nbsp;(InputMethodManager)&nbsp;getSystemService(INPUT_METHOD_SERVICE); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),0); &nbsp;&nbsp;&nbsp;&nbsp;} } public&nbsp;void&nbsp;signUpOrLogIn(View&nbsp;view)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;showProgressDialog(); &nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;email&nbsp;=&nbsp;usernameField.getText().toString().trim(); &nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;password&nbsp;=&nbsp;passwordField.getText().toString().trim(); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(signUpModeActive&nbsp;==&nbsp;true)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mAuth.createUserWithEmailAndPassword(email,password) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.addOnCompleteListener(MainActivity.this,&nbsp;new&nbsp;OnCompleteListener<AuthResult>()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onComplete(@NonNull&nbsp;Task<AuthResult>&nbsp;task)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hideProgressDialog(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Toast.makeText(MainActivity.this,&nbsp;"createUserWithEmail:onComplete:"&nbsp;+&nbsp;task.isSuccessful(),&nbsp;Toast.LENGTH_SHORT).show(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;If&nbsp;sign&nbsp;in&nbsp;fails,&nbsp;display&nbsp;a&nbsp;message&nbsp;to&nbsp;the&nbsp;user.&nbsp;If&nbsp;sign&nbsp;in&nbsp;succeeds &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;the&nbsp;auth&nbsp;state&nbsp;listener&nbsp;will&nbsp;be&nbsp;notified&nbsp;and&nbsp;logic&nbsp;to&nbsp;handle&nbsp;the &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;signed&nbsp;in&nbsp;user&nbsp;can&nbsp;be&nbsp;handled&nbsp;in&nbsp;the&nbsp;listener. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!task.isSuccessful())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Toast.makeText(MainActivity.this,&nbsp;"Authentication&nbsp;failed."&nbsp;+&nbsp;task.getException().toString().substring(task.getException().toString().indexOf("&nbsp;")), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Toast.LENGTH_SHORT).show(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.i("Error",&nbsp;task.getException().toString()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onAuthSuccess(task.getResult().getUser()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showUserList(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mAuth.signInWithEmailAndPassword(email,password) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.addOnCompleteListener(MainActivity.this,&nbsp;new&nbsp;OnCompleteListener<AuthResult>()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onComplete(@NonNull&nbsp;Task<AuthResult>&nbsp;task)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hideProgressDialog(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;If&nbsp;sign&nbsp;in&nbsp;fails,&nbsp;display&nbsp;a&nbsp;message&nbsp;to&nbsp;the&nbsp;user.&nbsp;If&nbsp;sign&nbsp;in&nbsp;succeeds &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;the&nbsp;auth&nbsp;state&nbsp;listener&nbsp;will&nbsp;be&nbsp;notified&nbsp;and&nbsp;logic&nbsp;to&nbsp;handle&nbsp;the &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;signed&nbsp;in&nbsp;user&nbsp;can&nbsp;be&nbsp;handled&nbsp;in&nbsp;the&nbsp;listener. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!task.isSuccessful())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;there&nbsp;was&nbsp;an&nbsp;error &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Toast.makeText(MainActivity.this,&nbsp;task.getException().toString(), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Toast.LENGTH_LONG).show(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onAuthSuccess(task.getResult().getUser()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showUserList(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;} } public&nbsp;void&nbsp;showUserList(){ &nbsp;&nbsp;&nbsp;&nbsp;startActivity(new&nbsp;Intent(getApplicationContext(),&nbsp;UserList.class)); &nbsp;&nbsp;&nbsp;&nbsp;finish(); } private&nbsp;void&nbsp;onAuthSuccess(FirebaseUser&nbsp;user)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;username&nbsp;=&nbsp;usernameFromEmail(user.getEmail()); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Write&nbsp;new&nbsp;user &nbsp;&nbsp;&nbsp;&nbsp;writeNewUser(user.getUid(),&nbsp;username,&nbsp;user.getEmail()); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Go&nbsp;to&nbsp;MainActivity } private&nbsp;String&nbsp;usernameFromEmail(String&nbsp;email)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(email.contains("@"))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;email.split("@")[0]; &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;email; &nbsp;&nbsp;&nbsp;&nbsp;} } private&nbsp;void&nbsp;writeNewUser(String&nbsp;userId,&nbsp;String&nbsp;name,&nbsp;String&nbsp;email)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;=&nbsp;new&nbsp;User(name,&nbsp;email); &nbsp;&nbsp;&nbsp;&nbsp;mDatabase.child("users").child(userId).setValue(user); &nbsp;&nbsp;&nbsp;&nbsp;ArrayList<String>&nbsp;userNames&nbsp;=&nbsp;new&nbsp;ArrayList<>(); &nbsp;&nbsp;&nbsp;&nbsp;userNames.add(name); &nbsp;&nbsp;&nbsp;&nbsp;mDatabase.child("usernamelist").setValue(userNames); } @Override protected&nbsp;void&nbsp;onCreate(Bundle&nbsp;savedInstanceState)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;super.onCreate(savedInstanceState); &nbsp;&nbsp;&nbsp;&nbsp;setContentView(R.layout.activity_main); &nbsp;&nbsp;&nbsp;&nbsp;mAuth&nbsp;=&nbsp;FirebaseAuth.getInstance(); &nbsp;&nbsp;&nbsp;&nbsp;mDatabase&nbsp;=&nbsp;FirebaseDatabase.getInstance().getReference(); &nbsp;&nbsp;&nbsp;&nbsp;if(mAuth.getCurrentUser()!=null){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showUserList(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;usernameField&nbsp;=&nbsp;(EditText)&nbsp;findViewById(R.id.username); &nbsp;&nbsp;&nbsp;&nbsp;passwordField&nbsp;=&nbsp;(EditText)&nbsp;findViewById(R.id.password); &nbsp;&nbsp;&nbsp;&nbsp;changeSignUpModeTextView&nbsp;=&nbsp;(TextView)&nbsp;findViewById(R.id.changeSignUpMode); &nbsp;&nbsp;&nbsp;&nbsp;signUpButton&nbsp;=&nbsp;(Button)&nbsp;findViewById(R.id.signupbutton); &nbsp;&nbsp;&nbsp;&nbsp;logo&nbsp;=&nbsp;(ImageView)findViewById(R.id.logo); &nbsp;&nbsp;&nbsp;&nbsp;relativeLayout=&nbsp;(RelativeLayout)findViewById(R.id.relativeLayout); &nbsp;&nbsp;&nbsp;&nbsp;signUpModeActive&nbsp;=&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;changeSignUpModeTextView.setOnClickListener(this); &nbsp;&nbsp;&nbsp;&nbsp;usernameField.setOnKeyListener(this); &nbsp;&nbsp;&nbsp;&nbsp;passwordField.setOnKeyListener(this); &nbsp;&nbsp;&nbsp;&nbsp;logo.setOnClickListener(this); &nbsp;&nbsp;&nbsp;&nbsp;relativeLayout.setOnClickListener(this); } }UserList.javapublic&nbsp;class&nbsp;UserList&nbsp;extends&nbsp;AppCompatActivity&nbsp;{ private&nbsp;static&nbsp;final&nbsp;String&nbsp;TAG&nbsp;=&nbsp;"UserList"&nbsp;; private&nbsp;DatabaseReference&nbsp;userlistReference; private&nbsp;ValueEventListener&nbsp;mUserListListener; ArrayList<String>&nbsp;usernamelist&nbsp;=&nbsp;new&nbsp;ArrayList<>(); ArrayAdapter&nbsp;arrayAdapter;; ListView&nbsp;userListView; @Override protected&nbsp;void&nbsp;onCreate(Bundle&nbsp;savedInstanceState)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;super.onCreate(savedInstanceState); &nbsp;&nbsp;&nbsp;&nbsp;setContentView(R.layout.activity_user_list); &nbsp;&nbsp;&nbsp;&nbsp;userlistReference&nbsp;=&nbsp;FirebaseDatabase.getInstance().getReference().child("usernamelist"); &nbsp;&nbsp;&nbsp;&nbsp;onStart(); &nbsp;&nbsp;&nbsp;&nbsp;userListView&nbsp;=&nbsp;(ListView)&nbsp;findViewById(R.id.userlistview); } @Override protected&nbsp;void&nbsp;onStart()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;super.onStart(); &nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;ValueEventListener&nbsp;userListener&nbsp;=&nbsp;new&nbsp;ValueEventListener()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onDataChange(DataSnapshot&nbsp;dataSnapshot)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;usernamelist&nbsp;=&nbsp;new&nbsp;ArrayList<>((ArrayList)&nbsp;dataSnapshot.getValue()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;usernamelist.remove(usernameOfCurrentUser()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.i(TAG,&nbsp;"onDataChange:&nbsp;"+usernamelist.toString()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arrayAdapter&nbsp;=&nbsp;new&nbsp;ArrayAdapter(UserList.this,android.R.layout.simple_list_item_1,usernamelist); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userListView.setAdapter(arrayAdapter); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onCancelled(DatabaseError&nbsp;databaseError)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.w(TAG,&nbsp;"onCancelled:&nbsp;",databaseError.toException()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Toast.makeText(UserList.this,&nbsp;"Failed&nbsp;to&nbsp;load&nbsp;User&nbsp;list.", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Toast.LENGTH_SHORT).show(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;userlistReference.addValueEventListener(userListener); &nbsp;&nbsp;&nbsp;&nbsp;mUserListListener&nbsp;=&nbsp;userListener; } public&nbsp;String&nbsp;usernameOfCurrentUser() { &nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;email&nbsp;=&nbsp;MainActivity.mAuth.getCurrentUser().getEmail(); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(email.contains("@"))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;email.split("@")[0]; &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;email; &nbsp;&nbsp;&nbsp;&nbsp;} } @Override public&nbsp;void&nbsp;onStop()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;super.onStop(); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Remove&nbsp;post&nbsp;value&nbsp;event&nbsp;listener &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(mUserListListener&nbsp;!=&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userlistReference.removeEventListener(mUserListListener); &nbsp;&nbsp;&nbsp;&nbsp;} } @Override public&nbsp;boolean&nbsp;onCreateOptionsMenu(Menu&nbsp;menu)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;getMenuInflater().inflate(R.menu.menu_main,&nbsp;menu); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true; } @Override public&nbsp;boolean&nbsp;onOptionsItemSelected(MenuItem&nbsp;item)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;switch(item.getItemId())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;R.id.action_logout: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FirebaseAuth.getInstance().signOut(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;startActivity(new&nbsp;Intent(this,&nbsp;MainActivity.class)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;finish(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;super.onOptionsItemSelected(item); &nbsp;&nbsp;&nbsp;&nbsp;} }}
打开App,查看更多内容
随时随地看视频慕课网APP