Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法从firebase子级检索整数值_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 无法从firebase子级检索整数值

Android 无法从firebase子级检索整数值,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我正在尝试获取存储在firebase child中的整数值。当我得到它时,会给出将字符串值解析为整数的错误。但当我解析该值时,它会抛出以下错误: java.lang.NumberFormatException:用于输入字符串:“结果” 代码如下: mref.child("data").child("device_token).child("res").child("results").addValueEventListener(new ValueEventListener() { @Overri

我正在尝试获取存储在firebase child中的整数值。当我得到它时,会给出将字符串值解析为整数的错误。但当我解析该值时,它会抛出以下错误: 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数据库数据:

请尝试此代码读取数据,并在获取数据时使用类更改“第一次插入数据”,然后将数据获取到该类中,如下面的代码所示

   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());
        }
    });
}

尝试以下方法从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();

}
试试这个

    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) {

        }
    });

当您尝试
记录
dataSnapshot.toString()
致命异常时,您会看到什么:主进程:com.assignment.saad.assignmentlocation,PID:20186 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String java.lang.Object.toString()”,检查它是否与.exists()一起存在; 是吗?签入日志消息?尝试使用
if(dataSnapshot.exists()){}
将您的语句包装在onDataChange下您的意思是我必须使用SingleValueEventListener并添加dataSnapshot.exist()?不,您也可以使用addValueEventListener。我使用了dataSnapshot.exist()。现在应用程序没有崩溃,但值没有显示在toast中。toast没有出现。您可以根据您的db名称和表名称更改代码。我添加了另一个方法来尝试。您可以添加带问题的fierbase数据吗?我添加了check plzclean并重新创建您的项目或禁用instnt Runbeas,因为我正在使用相同的函数从我的fierbase获取计数。您是否获得整数的值?您是将该值存储在字符串还是整数中?