【问题标题】:com.google.firebase.database.DatabaseException: Failed to convert a value of type java.lang.String to intcom.google.firebase.database.DatabaseException:无法将 java.lang.String 类型的值转换为 int
【发布时间】:2022-01-06 11:37:04
【问题描述】:
package com.pradeephr.firebasedemo;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.google.firebase.database.ChildEventListener;
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.pradeephr.firebasedemo.model.Person;

public class MainActivity extends AppCompatActivity {
    private EditText editText;
    private EditText editText1;
    private TextView textView;
    private Button buttonSend;
    private Button buttonRead;

    private FirebaseDatabase mDatabase;
    private DatabaseReference mRef;

    private ChildEventListener mchildEventListener;



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

        initViews();
        mDatabase=FirebaseDatabase.getInstance();
        mRef=mDatabase.getReference("user");

        this.buttonSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sendData();

            }
        });
        this.buttonRead.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                readData();
            }
        });

        mchildEventListener=new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
                Person p=snapshot.getValue(Person.class);
                Log.d("TAG",p.getName()+" "+p.getAge());
            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {

            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot snapshot) {

            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {

            }

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

            }
        };
        mRef.addChildEventListener(mchildEventListener);


    }

    private void sendData(){
        String dataName=editText.getText().toString();
        int dataAge=Integer.parseInt(editText1.getText().toString());
        String key=mRef.push().getKey();

        // when class is present in package
        Person person=new Person(dataAge,dataName);
        assert key != null;
        mRef.child(key).setValue(person);

        Toast.makeText(MainActivity.this,"Data inserted...",Toast.LENGTH_SHORT).show();
    }
    private void readData(){

    }

    private void initViews() {
        editText=findViewById(R.id.editTextName);
        textView=findViewById(R.id.text);
        buttonSend=findViewById(R.id.btn_send);
        buttonRead=findViewById(R.id.btn_read);
        editText1=findViewById(R.id.editTextAge);
    }
}

我正在尝试在我的代码中添加一个 childEventListener,并且我正在从 FirebaseDatabase 对“用户”进行 mRef 引用。

创建新用户后,立即从 childEventListener 调用 onChildAdded 方法,并将获取的数据登录到 logcat。

我正在向 Firebase 添加人名(字符串)和年龄(整数)。 但是在从 firebase 检索数据时,我遇到了这个错误。

This is how data is added in Firebase.

Cannot resolve this error

Person class

Format in which data is sent to Firebase

【问题讨论】:

  • 请将错误和代码都显示为文本而不是屏幕截图。从根本上看,问题在于您的条目将 age 设置为“20”而不是 20...您可以修复数据以使其实际上与您的课程相匹配吗?

标签: java android firebase firebase-realtime-database google-cloud-platform


【解决方案1】:

您的代码中的问题在于您将age 作为字符串添加到数据库中,然后您试图将其作为数字读取,因此出现了错误。

看到双引号""了吗?这使得 20 成为字符串而不是数字。

要解决这个问题,您必须将age 字段的类型更改为数字(不带双引号),您的问题就会得到解决。这样做,您的代码也可能保持不变。

【讨论】:

    【解决方案2】:

    如果你用字符串保存 val,

    你必须使用 to Integer.parseInt(val, 16);

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2019-12-09
    • 1970-01-01
    • 2020-08-17
    • 2021-05-02
    • 2018-04-09
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多