Java Android:firebase数据库方法中的access变量
我试图在警报对话框中显示我(成功地)从firebase获得的变量。正如我在评论中提到的,我一无所获。我的意思是我得到值的第一个声明,即Java Android:firebase数据库方法中的access变量,java,android,firebase,firebase-realtime-database,builder,Java,Android,Firebase,Firebase Realtime Database,Builder,我试图在警报对话框中显示我(成功地)从firebase获得的变量。正如我在评论中提到的,我一无所获。我的意思是我得到值的第一个声明,即“”。我做错了什么 编辑:变量名在我的类的顶部定义为publicstringname=“” 不能在onDataChange()方法之外简单地使用name的值。Firebase API是异步的,因此任何需要来自Firebase的数据的代码都需要位于onDataChange()方法中,或者从那里调用。因此,请检查副本,看看如何使用自定义回调解决此问题。有更简单的方法吗
“
”。我做错了什么
编辑:变量名在我的类的顶部定义为publicstringname=“”代码>
不能在onDataChange()
方法之外简单地使用name
的值。Firebase API是异步的,因此任何需要来自Firebase的数据的代码都需要位于onDataChange()
方法中,或者从那里调用。因此,请检查副本,看看如何使用自定义回调解决此问题。有更简单的方法吗?我对编程还不熟悉,但了解的不多:p如果你是初学者,这是最简单的方法。@AlexMamo谢谢你的回答。但另一个错误发生了。我的想法是用条形码扫描一些物品,并从firebase获得它们的名称。我做了你在副本上贴的事。但每次扫描新项目时,我都会得到上一个扫描项目的名称。与此类似,对同一项调用回调2次。这有什么问题?不能在onDataChange()
方法之外简单地使用name
的值。Firebase API是异步的,因此任何需要来自Firebase的数据的代码都需要位于onDataChange()
方法中,或者从那里调用。因此,请检查副本,看看如何使用自定义回调解决此问题。有更简单的方法吗?我对编程还不熟悉,但了解的不多:p如果你是初学者,这是最简单的方法。@AlexMamo谢谢你的回答。但另一个错误发生了。我的想法是用条形码扫描一些物品,并从firebase获得它们的名称。我做了你在副本上贴的事。但每次扫描新项目时,我都会得到上一个扫描项目的名称。与此类似,对同一项调用回调2次。这有什么问题?
@Override
public void handleResult(Result result) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Scan Result");
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
getItemData();
//here im trying to print the 'name' variable from getItemData(), and i get ""
builder.setMessage(name);
AlertDialog alert1 = builder.create();
alert1.show();
}
//here i get the item from firebase
public void getItemData(){
final DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("Items").child(myResult);
mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
name = dataSnapshot.child("itemname").getValue().toString();
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(addquantityactivity.this,"there was an error",Toast.LENGTH_SHORT).show();
}
});
}