繁体   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