我有这个小问题,我试图从我的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
答案 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();