基本上,我正在创建一个闹钟,只有当您扫描条形码时才会关闭闹钟,该条形码的值已输入我的Firebase数据库的子内容"内容"。我目前所拥有的扫描程序扫描代码并在Android应用程序的TextView contentTxt上显示此值。
当我单击" checkButton"时,应该将此TextView更改为toString,然后运行数据库以检查是否存在与其匹配的任何值。如果有,它将停止警报。如果没有,它将显示"这不是扫描条形码的通知"。但是,即使我的firebase中的值与我的TextView中的值相同,它也只是说它不是扫描条形码。
这是我的代码:
final Button checkButton = (Button) findViewById(R.id.checkBtn);
checkButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mDatabase.child("users").child(mUserId).child("barcodes").orderByChild("content")
.equalTo(contentTxt.toString()).addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChildren()){
// method that alters update text TextBox
set_alarm_text("Alarm off!");
// cancel the alarm
alarm_manager.cancel(pending_intent);
// put in extra string into my_intent, telling the clock that "Alarm Off" was pressed
my_intent.putExtra("extra", "alarm off");
// stop the ringtone
sendBroadcast(my_intent);
}
else{
Toast toast = Toast.makeText(getApplicationContext(),
"This is not a scanned barcode!", Toast.LENGTH_SHORT);
toast.show();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
以下是我的Firebase的屏幕截图,如果有帮助的话:
我的代码中没有出现实际的错误代码或崩溃,它只是不断地说没有相同的值,然后我就无法关闭该死的警报。
根据我的理解,我已将我的代码指向儿童"条形码"并按其子项" content"排序,只要它与我的contentTxt.toString相等。对我来说,听起来它应该隔离那个价值,看它是否有任何价值,所以也许你可以启发我。我甚至尝试过将dataSnapshot.hasChildren()更改为.exists()等,但无济于事。
答案 0 :(得分:1)
只是评论我解决了问题。我应该使用contentTxt.toString()
而不是contentTxt.getText().toString()
。愚蠢的错误,谢谢你的帮助。
答案 1 :(得分:0)
而不是dataSnapshot.hasChildren()
,请尝试dataSnapshot.exists()
。