簡體   English   中英

如何通過用戶 Model 從 firebase 獲取用戶數據?

[英]How to get User data Via User Model from firebase?

我非常努力; 但是,我無法通過我的應用程序的Profile Fragment中的用戶 Model 獲取用戶數據 這是我在項目中編寫的代碼。

ProfileFragment.java

reference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        User user = dataSnapshot.getValue(User.class);
        assert user != null;
        username.setText(user.getUserName());
        useremail.setText(user.getUserEmail());
        userphone.setText(user.getUserPhone());
        userdesc.setText(user.getUserDesc());
        if(user.getImageURL().equals("default")){
            profile_image.setImageResource(R.drawable.round_logo);
        }else {
            Picasso.with(getContext())
                    .load(user.getImageURL())
                    .placeholder(R.drawable.round_logo)
                    .into(profile_image);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
});

用戶.java

package com.psb.farmersmarket.Model;

public class User {
    private String UserName;
    private String UserPhone;
    private String UserDesc;
    private String UserEmail;
    private String UserID;
    private String imageURL;

    public User(String userName,String userPhone,String userDesc,String userEmail, String userID, String imageURL) {
        this.UserName = userName;
        this.UserPhone = userPhone;
        this.UserDesc = userDesc;
        this.UserEmail = userEmail;
        this.UserID = userID;
        this.imageURL = imageURL;
    }

    public User() {
    }

    public String getUserName() {
        return UserName;
    }

    public void setUserName(String userName) {
        UserName = userName;
    }

    public String getUserPhone() {
        return UserPhone;
    }

    public void setUserPhone(String userPhone) {
        UserPhone = userPhone;
    }

    public String getUserDesc() {
        return UserDesc;
    }

    public void setUserDesc(String userDesc) {
        UserDesc = userDesc;
    }

    public String getUserEmail() {
        return UserEmail;
    }

    public void setUserEmail(String userEmail) {
        UserEmail = userEmail;
    }

    public String getUserID() {
        return UserID;
    }

    public void setUserID(String userID) {
        UserID = userID;
    }

    public String getImageURL() {
        return imageURL;
    }

    public void setImageURL(String imageURL) {
        this.imageURL = imageURL;
    }
}

見上代碼。 我在用戶 model 中編寫了所有 getter 和 setter 方法。 即使錯誤表明用戶沒有設置方法。 錯誤也在下面給出。

錯誤信息

W/ClassMapper: No setter/field for search found on class com.psb.farmersmarket.Model.User
W/ClassMapper: No setter/field for Description found on class com.psb.farmersmarket.Model.User
    No setter/field for name found on class com.psb.farmersmarket.Model.User
    No setter/field for user id found on class com.psb.farmersmarket.Model.User
    No setter/field for email found on class com.psb.farmersmarket.Model.User
W/ClassMapper: No setter/field for Phone No found on class com.psb.farmersmarket.Model.User
    No setter/field for status found on class com.psb.farmersmarket.Model.User
W/Settings: Setting airplane_mode_on has moved from android.provider.Settings.System to android.provider.Settings.Global, returning read-only value.

數據庫

在此處輸入圖像描述

請幫我。 提前致謝。

從錯誤消息中,您的 JSON 看起來像這樣:

"userid": {
  "search": "value", 
  "name": "value",
  "user id": "value",
  "email": "value",
  "Phone No": "value",
  "status": "value",
  "airplane_mode": "value"
}

這個 JSON 和你的代碼之間有兩個問題:

  1. 並非 JSON 中的每個屬性都在User class 中具有字段/屬性,Firebase 對此發出警告。
  2. JSON 中的某些屬性似乎在User class 中有一個字段/屬性,但名稱不匹配。

您可以通過使用 Java 代碼中的注釋來修復這兩個問題:

@IgnoreExtraProperties
public class User {
    private String UserName;
    private String UserPhone;
    private String UserDesc;
    private String UserEmail;
    private String UserID;
    private String imageURL;

    public User(String userName,String userPhone,String userDesc,String userEmail, String userID, String imageURL) {
        this.UserName = userName;
        this.UserPhone = userPhone;
        this.UserDesc = userDesc;
        this.UserEmail = userEmail;
        this.UserID = userID;
        this.imageURL = imageURL;
    }

    public User() {
    }

    @PropertyName("name")
    public String getUserName() {
        return UserName;
    }

    @PropertyName("name")
    public void setUserName(String userName) {
        UserName = userName;
    }

    @PropertyName("Phone No")
    public String getUserPhone() {
        return UserPhone;
    }

    @PropertyName("Phone No")
    public void setUserPhone(String userPhone) {
        UserPhone = userPhone;
    }

    @Exclude
    public String getUserDesc() {
        return UserDesc;
    }

    @Exclude
    public void setUserDesc(String userDesc) {
        UserDesc = userDesc;
    }

    @PropertyName("email")
    public String getUserEmail() {
        return UserEmail;
    }

    @PropertyName("email")
    public void setUserEmail(String userEmail) {
        UserEmail = userEmail;
    }

    @PropertyName("user id")
    public String getUserID() {
        return UserID;
    }

    @PropertyName("user id")
    public void setUserID(String userID) {
        UserID = userID;
    }

    @Exclude
    public String getImageURL() {
        return imageURL;
    }

    @Exclude
    public void setImageURL(String imageURL) {
        this.imageURL = imageURL;
    }
}

你會看到我們在這里有三個注釋:

  1. User @IgnoreExtraProperties上的 @IgnoreExtraProperties 告訴 Firebase 忽略它在數據庫中找到的在User class 中沒有匹配字段的屬性。
  2. getter/setter 上的@PropertyName(...)告訴 Firebase 哪個 JSON 屬性從/寫入該值。
  3. getter/setter 上的@Exclude()告訴 Firebase 記下將此值從User class 寫入數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM