Android 将整数值存储到firebase中的变量中
我有一个小问题,我试图从我的firebase数据库中获取一个数字,问题是我可以获取这个数字,但似乎我做了一些错误的事情,将它存储在一个整数中 我想做的是从firebase获取数字,并将其与我的应用程序版本号进行比较,这样,如果应用程序高于我的当前版本,我就可以告诉我的用户更新应用程序 这是我的密码Android 将整数值存储到firebase中的变量中,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我有一个小问题,我试图从我的firebase数据库中获取一个数字,问题是我可以获取这个数字,但似乎我做了一些错误的事情,将它存储在一个整数中 我想做的是从firebase获取数字,并将其与我的应用程序版本号进行比较,这样,如果应用程序高于我的当前版本,我就可以告诉我的用户更新应用程序 这是我的密码 mDatabase.child("version").addValueEventListener(new ValueEventListener() { @Override
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
。