无法从Firebase子节点检索整数值

时间:2018-06-22 09:44:44

标签: android firebase firebase-realtime-database

我正在尝试获取存储在firebase子级中的整数值。当我得到它给解析字符串值给Integer的错误。但是当我解析该值时,它将引发此错误:  java.lang.NumberFormatException:对于输入字符串:“结果”

代码如下:

mref.child("data").child("device_token).child("res").child("results").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    int val= Integer.parseInt(dataSnapshot.getValue());
    Toast.makeText(RestaurantsActivity.this, val, Toast.LENGTH_SHORT).show();

}

如果我得到这样的价值:

mref.child("data").child("device_token).child("res").child("results").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    String val= dataSnapshot.getValue().toString();
    int intVal= Integer.parseInt(val);
    Toast.makeText(RestaurantsActivity.this, intVal, Toast.LENGTH_SHORT).show();

}

然后,应用程序崩溃并引发异常:  java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'java.lang.String java.lang.Object.toString()'

请帮助我检索整数值或将字符串值转换为整数。谢谢 这是Firebase数据库数据: enter image description here

3 个答案:

答案 0 :(得分:0)

尝试使用此代码读取数据,并在获取数据时先使用class更改插入数据,然后像下面的代码那样将数据获取到该类中。

   private void sqlQuery() {
    Query query =mFirebaseDatabase.child("usersDb").child("UserTable").orderByChild("email").equalTo("vikas@gmail.com");
    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {

                for (DataSnapshot issue : dataSnapshot.getChildren()) {
                    Log.d("Value::", issue.getValue(User.class).email);
                    Toast.makeText(getApplicationContext(),"sdfsdf",Toast.LENGTH_SHORT).show();
                }
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });


}

尝试此方法。

/**
 * User data change listener
 */
private void addUserChangeListener(String name) {
    // User data change listener
    // below code name  add your database name
    mFirebaseDatabase.child(name).addValueEventListener(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            User user = dataSnapshot.getValue(User.class);

            // Check for null
            if (user == null) {
                Log.e(TAG, "User data is null!");
                return;
            }

            Log.e(TAG, "User data is changed!" + user.name + ", " + user.email);

            // Display newly updated name and email
            mEtEmail.setText(user.email);

            // clear edit text
            mEtName.setText(user.name);
            mEtPwd.setText(user.pwd);

        }

        @Override
        public void onCancelled(DatabaseError error) {
            // Failed to read value
            Log.e(TAG, "Failed to read user", error.toException());
        }
    });
}

答案 1 :(得分:0)

尝试通过这种方式从fierbase获取int值

mref.child("data").child("device_token").child("res").child("results").addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
   int intVal = Integer.valueOf(String.valueOf(dataSnapshot.getValue()));
    Toast.makeText(RestaurantsActivity.this, intVal, Toast.LENGTH_SHORT).show();

}

答案 2 :(得分:0)

尝试一下。

    mref.child("data").child("device_token").child("res").child("results").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            int val = dataSnapshot.getValue(Integer.class);
            Toast.makeText(RestaurantsActivity.this, val, Toast.LENGTH_SHORT).show();

        }

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

        }
    });