Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从firebase在导航栏中加载配置文件图像和用户名_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 从firebase在导航栏中加载配置文件图像和用户名

Java 从firebase在导航栏中加载配置文件图像和用户名,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我试图在导航标题中检索用户在注册过程中保存的配置文件图像和用户名。这是我做的一些事情。起初我试图获取字符串当前用户,但它显示空指针异常,然后我尝试使用if语句,并将子项从当前用户id更改为用户,它只解决了空指针问题,但没有从firebase检索数据 MainActivity.java import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; import com.g

我试图在导航标题中检索用户在注册过程中保存的配置文件图像和用户名。这是我做的一些事情。起初我试图获取字符串当前用户,但它显示空指针异常,然后我尝试使用if语句,并将子项从当前用户id更改为用户,它只解决了空指针问题,但没有从firebase检索数据

MainActivity.java

   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 com.squareup.picasso.Picasso;

import de.hdodenhof.circleimageview.CircleImageView;

public class MainActivity extends AppCompatActivity {
    private NavigationView navigationView;
    private DrawerLayout drawerLayout;
    private RecyclerView postlist;
    private Toolbar mToolbar;
    private ActionBarDrawerToggle actionBarDrawerToggle;
    private FirebaseAuth mAuth;
    private FirebaseUser FirebaseUser;
    private DatabaseReference  UsersRef;
    private CircleImageView NavProfileImage;
    private TextView NavProfileUserName;
    String currentUserID;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FirebaseUser mFirebaseUser = mAuth.getCurrentUser();
        if (mFirebaseUser != null) {
            currentUserID = mFirebaseUser.getUid();
        }
        mAuth = FirebaseAuth.getInstance();



        mToolbar =(Toolbar) findViewById(R.id.main_page_toolbar);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setTitle("Home");

        drawerLayout = (DrawerLayout) findViewById(R.id.drawable_layout);
       actionBarDrawerToggle =  new ActionBarDrawerToggle(MainActivity.this,drawerLayout,R.string.drawer_open, R.string.drawer_close);
        navigationView = (NavigationView)findViewById(R.id.navigation_view);
       drawerLayout.addDrawerListener(actionBarDrawerToggle);
       actionBarDrawerToggle.syncState();
       getSupportActionBar().setDisplayHomeAsUpEnabled(true);


        View navView = navigationView.inflateHeaderView(R.layout.nav_header);
        NavProfileImage = (CircleImageView)navView.findViewById(R.id.nav_profile_image);
        NavProfileUserName = (TextView) navView.findViewById(R.id.nav_user_full_name);

        UsersRef = FirebaseDatabase.getInstance().getReference().child("Users");
        UsersRef.child(currentUserID).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot)
            {
                if(dataSnapshot.exists())
                {   if (dataSnapshot.hasChild("fullname")){
                    String fullname = dataSnapshot.child("fullname").getValue().toString();
                    NavProfileUserName.setText(fullname);
                }if (dataSnapshot.hasChild("profileimages")) {
                    String image = dataSnapshot.child("profileimages").getValue().toString();
                    Picasso.with(MainActivity.this).load(image).placeholder(R.drawable.profile).into(NavProfileImage);

                }else {
                    Toast.makeText(MainActivity.this, "Profile name do not exists...", Toast.LENGTH_SHORT).show();
                }




                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item)
            { UserMenuSelector(item);

                return false;
            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        FirebaseUser currentUser = mAuth.getCurrentUser();
        if (currentUser == null)
        {
            sendUserToLoginActivity();
        }else{
            CheckUserExistance();
        }
    }

    private void CheckUserExistance()
    {
        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();

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (actionBarDrawerToggle.onOptionsItemSelected(item))
        {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    private void UserMenuSelector(MenuItem item)
    {
        switch (item.getItemId())
        {
            case R.id.nav_home:
                Toast.makeText(this,"Home",Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_post:
                break;
            case R.id.nav_Profile:
                Toast.makeText(this,"profile",Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_find_friends:
                Toast.makeText(this,"frns",Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_logout:
                mAuth.signOut();
                sendUserToLoginActivity();
                break;
        }
    }
}

我使用glide从firebase加载图像。应该是这样的:

import com.bumptech.glide.Glide;

UserModel userModel = new UserModel;

Glide.with(YourActivity.this)
  .load(userModel.getUser_image())
  .into(user_image);

有关更多信息,请查看。

在注册用户时,您应该这样保存用户信息

                    final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                userModel.setUserid(user.getUid());
                userModel.setMobile("120xxxxxxxx");
                UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
                        .setDisplayName("Some Name")
                        .setPhotoUri("Phot url of the user")
                        .build();
                user.updateProfile(profileUpdates);
然后,当您希望从用户信息中检索图像时,其他信息也会……

   FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    if (user != null) {
        headerResult = new AccountHeaderBuilder()
                .withActivity(MainActivity.this)
                .withHeaderBackground(R.drawable.gradient_home_background)
                .addProfiles(
                        new ProfileDrawerItem().withName(user.getDisplayName()).withEmail(user.getPhoneNumber()).withIcon(user.getPhotoUrl())
                )
                .withOnAccountHeaderListener(new AccountHeader.OnAccountHeaderListener() {
                    @Override
                    public boolean onProfileChanged(View view, IProfile profile, boolean currentProfile) {
                        return false;
                    }
                })
                .build();
    } else {
        headerResult = new AccountHeaderBuilder()
                .withActivity(MainActivity.this)
                .withHeaderBackground(R.drawable.gradient_home_background)
                .withOnAccountHeaderListener(new AccountHeader.OnAccountHeaderListener() {
                    @Override
                    public boolean onProfileChanged(View view, IProfile profile, boolean currentProfile) {
                        return false;
                    }
                })
                .build();
    }

看到您的数据库结构后,我相信
Users
节点中的子节点是当前
firebase用户的
UID
,在
Users
节点中,如果您试图获取当前用户的用户详细信息,那么您的查询应该是这样的

if (mFirebaseUser != null) {
            currentUserID = mFirebaseUser.getUid();
        }
 UsersRef = FirebaseDatabase.getInstance().getReference().child("Users");
     UsersRef.child(currentUserID).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot)
            {
                if(dataSnapshot.exists())
                {   if (dataSnapshot.hasChild("fullname")){
                    String fullname = dataSnapshot.child("fullname").getValue().toString();
                    NavProfileUserName.setText(fullname);
                }if (dataSnapshot.hasChild("profileimages")) {
                    String image = dataSnapshot.child("profileimages").getValue().toString();
                    Picasso.with(MainActivity.this).load(image).placeholder(R.drawable.profile).into(NavProfileImage);

                }else {
                    Toast.makeText(MainActivity.this, "Profile name do not exists...", Toast.LENGTH_SHORT).show();
                }




                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

我明白了,你在初始化它之前使用过mAuth!所以它返回null

 FirebaseUser mFirebaseUser = **mAuth**.getCurrentUser();
    if (mFirebaseUser != null) {
        currentUserID = mFirebaseUser.getUid();
    }
    **mAuth = FirebaseAuth.getInstance();**

Move
mAuth=FirebaseAuth.getInstance()FirebaseUser mFirebaseUser=mAuth.getCurrentUser()前面的一行

glide是否有依赖项?是的,您只需要使用glideimport com.bumptech.glide.glide;我还需要添加注释处理器吗?是的,在github链接上,他们解释了如何在项目上添加注释处理器。我认为您在数据库上的查询是错误的。显示firebase数据库结构。您已将
Users
节点作为基本数据库引用,并且您正在查询另一个同名的子节点,即UsersRef.child(“Users”)。我已添加firebase,请在下面重试我的回答。希望它能起作用。添加此行
mAuth=FirebaseAuth.getInstance()此行上方
FirebaseUser mFirebaseUser=mAuth.getCurrentUser()从注册到存储,一切都很顺利,但在检索用户数据之前,我无法在导航栏上获取这些信息。用户必须使用某些firebase凭据登录。或者它会返回一个异常。得到这个:java.lang.NullPointerException:尝试在mezohn.com.alfachat1.MainActivity.onCreate(MainActivity.java:48)的空对象引用上调用虚拟方法'com.google.firebase.auth.FirebaseUser.com.google.firebase.auth.FirebaseAuth.getCurrentUser()。我从你的问题中复制了代码。只需将我的代码行更改为和您的代码行相同的代码行,其余代码行保持原样即可;添加此行
mAuth=FirebaseAuth.getInstance()这是在那里