Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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数据库中获取一个数字,问题是我可以获取这个数字,但似乎我做了一些错误的事情,将它存储在一个整数中 我想做的是从firebase获取数字,并将其与我的应用程序版本号进行比较,这样,如果应用程序高于我的当前版本,我就可以告诉我的用户更新应用程序 这是我的密码 mDatabase.child("version").addValueEventListener(new ValueEventListener() { @Override

我有一个小问题,我试图从我的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” null对象引用上的java.lang.Integer.intValue()

PS:我这样做解决了我的问题
Integer.valueOf(datasnapshot.getvalue().tostring())

,因为我看到它与Firebase并不完全相关。
我认为您需要首先检查对象为null的原因,然后使用以下命令将其转换为int(这是您需要的):

此外,还应根据以下内容考虑: 从getValue()返回的可能类型有:

Boolean
长的
双重的
地图
列表

正如我所见,它与Firebase并不完全相关。
我认为您需要首先检查对象为null的原因,然后使用以下命令将其转换为int(这是您需要的):

此外,还应根据以下内容考虑: 从getValue()返回的可能类型有:

Boolean
长的
双重的
地图
列表

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

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


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

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

试试这个

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

        }
    });
}
}
试试这个

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作为数据类型放在前面

你可以试试这段代码,它对我很有用…我把放在变量adc前面,作为数据类型

int ultimaVersion = Integer.parseInt(dataSnapshot.getValue()+"");
在这里,我们只是将一个空字符串附加到长值,以便生成一个完整的字符串,并使用parseInt将其全部转换为整数

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

在这里,我们刚刚将一个空字符串附加到长值,以便生成一个完整的字符串,并使用parseInt将其全部转换为整数。如果您完全确定该值将是一个整数,那么这将适用于您

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

如果您绝对确定该值将是一个整数,那么这将适用于您

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

科特林

这对我有用

int variableName=documentSnapshot.getLong("field name").intValue();
这对我有用

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

请添加您的数据库结构和使用
Integer.intValue()
.hi@AlexMamo我没有使用Integer.intValue()请添加您的数据库结构和使用
Integer.intValue()
.hi@AlexMamo我没有使用Integer.intValue()的行如果我使用datasnapshot.getvalue执行Log.e,我得到的值是“34”,与我数据库中的值相同OK。当你写“34”时,你指的是它的字符串?它是一个整数,不是字符串。请尝试integer.valueOf(datasnapshot.getvalue())。相反,它应该是
(Long)datasnapshot.getvalue()
,正如你在回答中提到的那样。如果我用datasnapshot.getvalue记录.e,我会得到值“34”,与我的数据库中的值相同OK。当你写“34”时,你指的是它的字符串?它是一个整数,不是字符串。请尝试integer.valueOf(datasnapshot.getvalue())。相反,它应该是
(Long)datasnapshot.getvalue()
,正如你在回答中提到的那样,Java中没有
int.class
。Java中没有
int.class