将整数值存储到firebase中的变量中

时间:2017-11-21 21:55:51

标签: android firebase firebase-realtime-database

我有这个小问题,我试图从我的firebase数据库中获取一个数字,问题是我可以获得数字,但似乎我做错了将它存储在一个整数内。

我想要做的是从firebase获取数字并将其与我的应用程序的版本号进行比较,因此如果应用程序高于我的当前版本,我可以告诉我的用户更新应用程序

这是我的代码

mDatabase.child("version").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
               // System.out.println(dataSnapshot.getValue());
                //Log.e("Versiondeapp",""+dataSnapshot.getValue());
                int ultimaVersion = (int) dataSnapshot.getValue();
                if(versionCode!=ultimaVersion){
                    ActualizarAppAlert();
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

我的问题在这里

int ultimaVersion = (int) dataSnapshot.getValue();

似乎我无法将该值从firebase存储到整数变量

我当前的堆栈错误

  

java.lang.NullPointerException:尝试调用虚方法' int   java.lang.Integer.intValue()'在空对象引用上

先谢谢

PS:我解决了这个问题 Integer.valueOf(datasnapshot.getvalue().tostring());

感谢motis10

8 个答案:

答案 0 :(得分:1)

我发现它与Firebase并不完全相关 我认为首先需要检查对象为何为null,然后将其转换为int(这就是你所需要的):

Integer.valueOf(dataSnapShot.getValue())

另外考虑到Firebase documentation: getValue()返回的可能类型是:

Boolean  
Long  
Double  
Map<String, Object>  
List<Object>  

答案 1 :(得分:1)

如果您完全确定该值将是一个整数,那么它将为您工作。

if(dataSnapshot.exists() && dataSnapshot.getValue()!= null){
    int ultimaVersion = ((Long) dataSnapshot.getValue()).intValue();
}

答案 2 :(得分:1)

kotlin

val result = dataSnapshot.value.toString()
desiredVariable = result.toInt()

答案 3 :(得分:0)

要解决此问题,请更改以下代码行:

int ultimaVersion = (int) dataSnapshot.getValue();

int ultimaVersion = dataSnapshot.getValue(Integer.class);

答案 4 :(得分:0)

mDatabase.child("version").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                // System.out.println(dataSnapshot.getValue());
                //Log.e("Versiondeapp",""+dataSnapshot.getValue());
                int ultimaVersion =  ds.getValue(Integer.class);
                if(versionCode!=ultimaVersion){
                    ActualizarAppAlert();
            }

            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

试试这个..

答案 5 :(得分:0)

package rifqi.firebaseiotawal;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;


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.google.firebase.database.ValueEventListener;

import java.util.concurrent.atomic.AtomicInteger;

import static android.R.id.message;


public class MainActivity extends AppCompatActivity {
private TextView txt;


   private FirebaseDatabase database = FirebaseDatabase.getInstance();
   private DatabaseReference myRef = database.getReference();
private  DatabaseReference mchild = myRef.child("adc");


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 txt = (TextView) findViewById(R.id.text1);
txt.setText("hai");
    }
@Override
    protected void onStart () {
    super.onStart();
    mchild.addValueEventListener(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Integer adc = dataSnapshot.getValue(Integer.class);
                txt.setText(""+  adc);

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}
}

您可以尝试使用此代码,它可以为我工作...我将置于变量 adc 前面作为数据类型

答案 6 :(得分:0)

只需

int ultimaVersion = Integer.parseInt(dataSnapshot.getValue()+“”);

在这里,我们刚刚将一个空字符串附加到Long值上,以便生成一个完整的字符串,并使用parseInt将所有字符串转换为整数

答案 7 :(得分:0)

这对我有用

int variableName=documentSnapshot.getLong("field name").intValue();