簡體   English   中英

我正在嘗試從 FireBase 讀取信息,但出現此錯誤。 如何解決?

[英]I'm trying to read information from FireBase, but I get this error. How to fix it?

活動代碼。 進入活動后,我收到一個錯誤:

無法將 java.lang.String 類型的 object 轉換為 com.test.nmfestdemo.Info 類型

我嘗試以不同的方式編寫,但要么什么都沒發生,要么 null 出現錯誤。

public class Account extends AppCompatActivity {
            private Button button1;
            private TextView textview1;
            private Intent i =new Intent();
        
            private String User_KEY ="User";
        private DatabaseReference mDataBase;
        private FirebaseAuth mAuth;

    private DatabaseReference mDataBaseInfo;

    private String Info_KEY ="Info";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_account);
        button1 = findViewById(R.id.button1);
        textview1 = (TextView) findViewById(R.id.textview1);

        mDataBase = FirebaseDatabase.getInstance().getReference(User_KEY);
        mDataBaseInfo = FirebaseDatabase.getInstance().getReference(Info_KEY);
        getDataFromDB();

        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mAuth.signOut();
                i.setClass(getApplicationContext(),MainActivity.class);
                startActivity(i);
            }
        });



    }
    public void getDataFromDB(){
        ValueEventListener vListener = new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot postSnapshot) {

                for (DataSnapshot ds : postSnapshot.getChildren()) {
                    Info info = ds.getValue(Info.class);
                    textview1.setText(String.valueOf(info));
                }

            }

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

            }
        };
        mDataBaseInfo.addValueEventListener(vListener);
    }
}

Class 代碼

public class Info {
    public String day;


    public Info(String day) {
        this.day = day;
    }

    public String getDay() {
        return day;
    }
}

錯誤代碼和FireBase結構

如果Info_KEY變量包含一個字符串,該字符串的值等於“Info”,那么預期的行為會得到以下錯誤:

無法將 java.lang.String 類型的 object 轉換為 com.test.nmfestdemo.Info 類型

這是因為,在“信息”節點下,沒有信息對象。 只有一個名為day的字段,其中包含字符串值“1”。 因此,您無法將字符串 object 轉換為 Info 類型的 object。 如果要讀取day字段的值,則應刪除循環:

public void getDataFromDB(){
    ValueEventListener vListener = new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot postSnapshot) {
            Info info = postSnapshot.getValue(Info.class);
            textview1.setText(String.valueOf(info));
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {
            Log.d("TAG", error.getMessage()); //Never ignore potential errors!
        }
    };
    mDataBaseInfo.addValueEventListener(vListener);
}

暫無
暫無

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

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