我正在研究应引用我的Firebase Cloud数据库的这段代码。如果数据库中没有uID(来自已成功通过身份验证的用户),则应将其发送给SetupActivity类。现在,按照此代码所示,它不会进入数据库,而是直接进入我的MainActivity。数据库权限允许读/写。任何人都有可能是问题的线索?
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.support.v4.view.GravityCompat;
import android.support.v7.app.ActionBarDrawerToggle;
import android.view.MenuItem;
import android.support.design.widget.NavigationView;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import com.firebase.ui.auth.AuthUI;
import com.firebase.ui.auth.IdpResponse;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseAuthException;
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 java.util.Arrays;
import java.util.List;
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
private FirebaseAuth mAuth;
private DatabaseReference UsersRef;
String currentUserID;
List<AuthUI.IdpConfig> providers = Arrays.asList(
new AuthUI.IdpConfig.EmailBuilder().build(),
new AuthUI.IdpConfig.GoogleBuilder().build());
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAuth = FirebaseAuth.getInstance();
UsersRef = FirebaseDatabase.getInstance().getReference().child("Users");
//Navigation Drawer
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("Home");
DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
navigationView.setNavigationItemSelectedListener(this);
}
@Override
protected void onStart()
{
super.onStart();
FirebaseUser currentUser = mAuth.getCurrentUser();
if(currentUser == null)
{
SendUserToLoginActivity();
}
else
{
CheckUserExistence();
}
}
private void CheckUserExistence()
{
final String current_user_id = mAuth.getCurrentUser().getUid();
UsersRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
if(!dataSnapshot.hasChild(current_user_id))
{
SendUserToSetupActivity();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void SendUserToSetupActivity()
{
Intent setupIntent = new Intent(MainActivity.this, SetupActivity.class);
setupIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(setupIntent);
finish();
}
private void SendUserToLoginActivity()
{
Intent loginIntent = new Intent(MainActivity.this, LoginActivity.class);
loginIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(loginIntent);
finish();
}
public void onBackPressed() {
DrawerLayout drawer = findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
Fragment fragment;
if (id == R.id.nav_leader) {
} else if (id == R.id.nav_mypicks) {
} else if (id == R.id.nav_tribe) {
} else if (id == R.id.nav_results) {
} else if (id == R.id.nav_chat) {
} else if (id == R.id.nav_settings) {
} else if (id == R.id.nav_about) {
} else if (id == R.id.nav_donate) {
} else if (id == R.id.nav_logout) {
mAuth.signOut();
SendUserToLoginActivity();
} else if (id == R.id.nav_feedback) {
} else if (id == R.id.nav_profile) {
} else if (id == R.id.nav_home) {
}
DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
}
参考方案
你做错了
这里current_user_id
是一个uId,可在用户身份验证中使用
并且您尝试将其与数据库密钥进行匹配,这在任何方面都不相同,因此您必须与要验证用户身份的email
或phone number
进行比较。
做这样的事情,
private void CheckUserExistence()
{
final String current_user_id = mAuth.getCurrentUser().getEmail();
UsersRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
for(DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
User user = dataSnapshot1.getValue(User.class);
if(user.getEmail().equels(current_user_id))
{
SendUserToSetupActivity();
break;
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
单击后退按钮时,滑行加载的图像会重置 - java我正在滑行加载图像。但是问题是,当我们按下后退按钮时,从视图中清除加载的图像。无论我在活动图像视图中还是在recyclerview中加载图像,我都面临着这个问题。我正在加载图像GlideApp.with(this) .load(url) .into(mToolbarAvatar); 参考方案 在代码中添加两行.skipMemoryCache(true) .d…
有没有一种方法可以在一个mediaplayer对象中播放mp3文件? - java我可以使用Java android中的Mediaplayer类播放声音。我这样制作一个Mediaplayer对象。Mediaplayer mp=Mediaplayer.create(this,R.raw.mysong); 然后开始播放,但是如果我有一首以上的歌曲必须播放。我需要为每个人都做对象吗?我要说的是Mediaplayer类是否具有可以清除旧歌曲并放上…
Android Firebase:将数据保存到数据库 - java我正在尝试从Firebase保存和检索数据,但是在获取正确的语法时遇到了一些麻烦。用户通过电子邮件和密码的身份验证方法进行注册,并使用相同的详细信息登录。我有两个编辑文本字段,要求输入名称和语句。在两个编辑文本框下面有一个按钮,用于将数据保存到数据库。private void saveQuote(){ String name = author.getText…
Android-通过ArrayList时应用崩溃 - java我通过单击按钮将类型为ArrayList的主题传递给另一个活动。但是此后该应用程序崩溃了。这是我的第一个活动的摘录。 ComputeGrades是按下按钮时要调用的方法。我没有为显示主题的动态表添加代码。public class ACMActivity2A extends Activity { ArrayList<Subject> subject…
Java:放入十进制数字时会崩溃[RESOLVE] - java好的,我的问题是:我创建了一个应用程序来计算我的IMC(法语)。但是,当我尝试在EditText中以十进制输入我的身高或体重时,会返回此错误:03-27 18:52:25.459 31274-31274/fr.imc.oxyz0n359.imc E/AndroidRuntime: FATAL EXCEPTION: main Process: fr.imc.o…