首页 文章

如何从firebase android中检索用户数据

提问于
浏览
-1

我创建了一个配置文件页面,但我无法检索存储在用户下的用户详细信息作为根节点 . 并且每个用户都存储在其userid节点下,但我只检索用户的 Profiles 图片,并且没有检索到其余的细节 -

Here is my code for DisplayProfile.java

public class DisplayProfile extends AppCompatActivity {
private static final String TAG = "DisplayProfile";
public static final String Firebase_Server_URL = "https://gakusei-go.firebaseio.com/";


private ImageView profilePic;
private TextView profileName, profilePhone, profileEmail;
private Button profileUpdate;
private FirebaseAuth firebaseAuth;
private FirebaseDatabase firebaseDatabase;
private FirebaseStorage firebaseStorage;
private String userID;
FirebaseUser user;
private FirebaseAuth.AuthStateListener mAuthListener;


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

    profileUpdate=(Button)findViewById(R.id.pbuttonSave);
    profilePic = findViewById(R.id.ivProfilePic);
    profileName = findViewById(R.id.tvProfileName);
    profilePhone = findViewById(R.id.tvProfilePhone);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    firebaseAuth = FirebaseAuth.getInstance();
    firebaseDatabase = FirebaseDatabase.getInstance();
    FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser();

    System.out.println(userID);
    firebaseStorage = FirebaseStorage.getInstance();
    userID = firebaseAuth.getUid();
    System.out.println(userID);
    profileUpdate.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            startActivity(new Intent(DisplayProfile.this, SecondActivity.class));

        }

    })
    mAuthListener = new FirebaseAuth.AuthStateListener() {
       @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

            FirebaseUser user = firebaseAuth.getCurrentUser();
            if (user != null) {
                // User is signed in
                Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
                // Toast.makeText(getApplicationContext(),"Successfully signed in with: " + user.getEmail());
                Toast.makeText(getApplicationContext(), "Enter email address!" +user.getEmail(), Toast.LENGTH_SHORT).show();
            } else {
                                  Log.d(TAG, "onAuthStateChanged:signed_out");
                Toast.makeText(getApplicationContext(), "Successfuly signed out", Toast.LENGTH_SHORT).show();
            }
        }
    };
    StorageReference storageReference = firebaseStorage.getReference();
    storageReference.child("images").child(firebaseAuth.getUid()+ "." + "jpg").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
        @Override
        public void onSuccess(Uri uri) {
            Picasso.get().load(uri).fit().centerCrop().into(profilePic);
        }
    });
    DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("users");
    databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot Mainsnapshot) {

            for (DataSnapshot datasnapShot : Mainsnapshot.getChildren()) {

                Users userProfile = datasnapShot.getValue(Users.class);
                profileName.setText("Name: " + userProfile.getName());
                profilePhone.setText("Age: " + userProfile.getPhone());
                profileEmail.setText("Email: " + userProfile.getEmail());
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
            Toast.makeText(DisplayProfile.this, databaseError.getCode(), Toast.LENGTH_SHORT).show();
        }
    });
  }
 }

The code for Users.java is here

package com.example.deepak.myapplication;


   public class Users {
   public String imageUrl;
   public String imageName;
   public String uid;
   public String name;
   public String email;
   public String password;
   public String phone;

public Users() {
}


public Users(String uid, String name, String email, String password, String phone) {
    this.uid = uid;
    this.name = name;
    this.email = email;
    this.password = password;
    this.phone = phone;
}

public String getUid() {
    return uid;
}

public void setUid(String uid) {
    this.uid = uid;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public String getPhone() {
    return phone;
}

public void setPhone(String phone) {
    this.phone = phone;
}

}

My Display_activity is here

<?xml version="1.0" encoding="utf-8"?>
     <android.support.constraint.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_image_upload"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical">

<ImageView
    android:id="@+id/ivProfilePic"
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginBottom="8dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.238"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.0"
    app:srcCompat="@mipmap/ic_launcher" />

<Button
    android:id="@+id/pbuttonSave"
    android:layout_width="100dp"
    android:layout_height="50dp"
    android:layout_marginTop="40dp"
    android:layout_marginEnd="140dp"
    android:text="Edit"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/tvProfilePhone" />


<TextView

    android:id="@+id/tvProfileName"
    android:layout_width="wrap_content"
    android:layout_height="36dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginBottom="208dp"
    android:textSize="28dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.401"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/ivProfilePic" />


<TextView
    android:id="@+id/tvProfilePhone"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginBottom="8dp"
    android:text="Phone: "
    android:textSize="28dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.378"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/tvProfileName"
    app:layout_constraintVertical_bias="0.391" />


<TextView
    android:id="@+id/tvProfileEmail"
    android:layout_width="69dp"
    android:layout_height="41dp"
    android:layout_marginStart="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginBottom="160dp"
    android:text="Email"
    android:textSize="22dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.384"
    app:layout_constraintStart_toStartOf="parent" />
    </android.support.constraint.ConstraintLayout>

这是 my database structure

Database Structure

2 回答

  • 0

    根据您的数据库,您有:

    users
         userId 
             name : user_name
             phone : user_phone
    

    然后你需要做以下事情:

    DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("users");
    databaseReference.addListenerForSingleValueEvent(new ValueEventListener()
    

    在您的代码中,您有 getReference("user") ,然后您编写了 child("users") ,这意味着您正在访问数据库中不存在的节点 .


    完整代码:

    DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("users");
    databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot mainSnapshot) {
    
                Users userProfile = mainSnapshot.getValue(Users.class);
                profileName.setText("Name: " + userProfile.getName());
                profilePhone.setText("Phone: " + userProfile.getPhone());
                profileEmail.setText("Email: " + userProfile.getEmail());
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });
    
  • 0

    您的错误在 getReference("user") 中,然后进一步引用该子 users

    但您仍然设法获取配置文件图像,因为您通过直接引用 Cloud 存储来获取图像,其中您已经知道配置文件图片名为 gs://<bucket>/images/<uid>.jpg (不使用您在用户数据中使用的 imageURL 值)实时数据库)

相关问题