com.google.firebase.database.DatabaseException: 无法将 java.lang.String 类型的值转换为 int
com.google.firebase.database.DatabaseException: Failed to convert a value of type java.lang.String to int
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 添加人名 (String) 和年龄 (int)。
但是在从 firebase 检索数据时我遇到了这个错误。
This is how data is added in Firebase.
Cannot resolve this error
Person class
Format in which data is sent to Firebase
如果用 String 保存 val,
你必须使用 Integer.parseInt(val, 16);
您的代码中的问题在于您将 age
作为字符串添加到数据库中,然后您试图将其作为数字读取,因此出现错误。
看到双引号 ""
了吗?这使得 20 成为一个字符串而不是一个数字。
为了解决这个问题,您必须将 age
字段的类型更改为数字(不带双引号),您的问题将得到解决。这样做,您的代码也可能保持不变。
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 添加人名 (String) 和年龄 (int)。 但是在从 firebase 检索数据时我遇到了这个错误。
This is how data is added in Firebase.
Cannot resolve this error
Person class
Format in which data is sent to Firebase
如果用 String 保存 val,
你必须使用 Integer.parseInt(val, 16);
您的代码中的问题在于您将 age
作为字符串添加到数据库中,然后您试图将其作为数字读取,因此出现错误。
看到双引号 ""
了吗?这使得 20 成为一个字符串而不是一个数字。
为了解决这个问题,您必须将 age
字段的类型更改为数字(不带双引号),您的问题将得到解决。这样做,您的代码也可能保持不变。