Android:Firebase 结果在不同的条形码扫描中连续显示两次
Android: Firebase results are showing twice in a row in different barcode scans
所以我的程序正在使用条形码扫描项目并从 firebase 获取(成功地)它的名称,然后我试图在警告对话框中打印名称。我的问题是,每次我扫描一个项目时,AlertDialog 都会显示预览扫描的项目。例如我扫描 item1。在我要扫描的下一个产品中,它将再次打印 item1 的 name.But 在下一个扫描中,它将打印 item2 的名称等等。
总体问题是在连续两次不同的扫描中打印一个产品的相同名称。怎么了?
在此代码中,我 return DataSnapshot 值作为方法的结果
public interface MyCallback {
void onCallback(String value);
}
public void readData(final MyCallback myCallback) {
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();
myCallback.onCallback(name);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(addquantityactivity.this,"there was an error",Toast.LENGTH_SHORT).show();
}
});
}
这是警报对话框生成器
public void handleResult(Result result) {
myResult = result.getText();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Scan Result");
readData(new MyCallback() {
@Override
public void onCallback(String value) {
//here i get the item's name from firebase
finalname=value;
}
});
//and here im printing it to the builder
builder.setMessage(finalname);
AlertDialog alert1 = builder.create();
alert1.show();
}
值得一提的是,我在同一个 class 中还有另一个 firebase 方法,它更新数据库中的一些数据。如果这可以提供有关该问题的更多信息..
您在进程完成之前显示了一个对话框。你可以试试这个:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Scan Result");
readData(new MyCallback() {
@Override
public void onCallback(String value) {
finalname=value;
builder.setMessage(finalname);
AlertDialog alert1 = builder.create();
alert1.show();
}
});
你应该在完成后显示
所以我的程序正在使用条形码扫描项目并从 firebase 获取(成功地)它的名称,然后我试图在警告对话框中打印名称。我的问题是,每次我扫描一个项目时,AlertDialog 都会显示预览扫描的项目。例如我扫描 item1。在我要扫描的下一个产品中,它将再次打印 item1 的 name.But 在下一个扫描中,它将打印 item2 的名称等等。 总体问题是在连续两次不同的扫描中打印一个产品的相同名称。怎么了?
在此代码中,我 return DataSnapshot 值作为方法的结果
public interface MyCallback {
void onCallback(String value);
}
public void readData(final MyCallback myCallback) {
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();
myCallback.onCallback(name);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(addquantityactivity.this,"there was an error",Toast.LENGTH_SHORT).show();
}
});
}
这是警报对话框生成器
public void handleResult(Result result) {
myResult = result.getText();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Scan Result");
readData(new MyCallback() {
@Override
public void onCallback(String value) {
//here i get the item's name from firebase
finalname=value;
}
});
//and here im printing it to the builder
builder.setMessage(finalname);
AlertDialog alert1 = builder.create();
alert1.show();
}
值得一提的是,我在同一个 class 中还有另一个 firebase 方法,它更新数据库中的一些数据。如果这可以提供有关该问题的更多信息..
您在进程完成之前显示了一个对话框。你可以试试这个:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Scan Result");
readData(new MyCallback() {
@Override
public void onCallback(String value) {
finalname=value;
builder.setMessage(finalname);
AlertDialog alert1 = builder.create();
alert1.show();
}
});
你应该在完成后显示