You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase数据查询主键匹配失败问题排查及代码优化请求

Firebase数据查询匹配失败修复方案

问题核心原因

代码中查询的字段名与Firebase数据库实际字段名大小写不匹配,Firebase Realtime Database对字段名大小写敏感,导致查询条件无法匹配到目标数据。例如数据库中字段为aadhaarNumber,但代码中使用了aadharnumber,二者命名不一致导致匹配失败。

修复后的完整代码

package com.example.emergencyconnect;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

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.Query;
import com.google.firebase.database.ValueEventListener;

public class Hospital_personal_information extends AppCompatActivity {

    private EditText TextAadhaar, TextVoterId, TextDrivingLicense, TextVehicleNumber;
    private Button btnSearch;
    private DatabaseReference databaseReference;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hospital_personal_information);

        // Initialize Firebase Database reference
        databaseReference = FirebaseDatabase.getInstance().getReference("users");

        // Initialize EditText fields and Button
        TextAadhaar = findViewById(R.id.TextAadhaar);
        TextVoterId = findViewById(R.id.TextVoterId);
        TextDrivingLicense = findViewById(R.id.TextDrivingLicense);
        TextVehicleNumber = findViewById(R.id.TextVehicleNumber);
        btnSearch = findViewById(R.id.btnSearch);

        // Set OnClickListener for the search button
        btnSearch.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                searchEmergencyContacts();
            }
        });
    }

    private void searchEmergencyContacts() {
        // Get input from EditText fields
        String aadhaar = TextAadhaar.getText().toString().trim();
        String voterId = TextVoterId.getText().toString().trim();
        String drivingLicense = TextDrivingLicense.getText().toString().trim();
        String vehicleNumber = TextVehicleNumber.getText().toString().trim();

        // Determine which query to use based on provided input
        Query query = null;
        if (!TextUtils.isEmpty(aadhaar)) {
            query = databaseReference.orderByChild("aadhaarNumber").equalTo(aadhaar);
        } else if (!TextUtils.isEmpty(voterId)) {
            query = databaseReference.orderByChild("voterId").equalTo(voterId);
        } else if (!TextUtils.isEmpty(drivingLicense)) {
            query = databaseReference.orderByChild("drivingLicense").equalTo(drivingLicense);
        } else if (!TextUtils.isEmpty(vehicleNumber)) {
            query = databaseReference.orderByChild("vehicleNumber").equalTo(vehicleNumber);
        } else {
            Toast.makeText(this, "请至少输入一个查询值", Toast.LENGTH_SHORT).show();
            return;
        }

        // Execute the query
        query.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                // Check if data exists for the provided input
                if (dataSnapshot.exists()) {
                    // Get the first matching record
                    DataSnapshot record = dataSnapshot.getChildren().iterator().next();
                    String patientKey = record.getKey(); // Get the unique Firebase key

                    // Pass the key to the next activity
                    Intent intent = new Intent(Hospital_personal_information.this, Hospital_Patient_personal_details.class);
                    intent.putExtra("patient_key", patientKey); // Pass the key
                    startActivity(intent); // Start the second activity
                } else {
                    Toast.makeText(Hospital_personal_information.this, "未找到匹配记录", Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Toast.makeText(Hospital_personal_information.this, "错误:" + databaseError.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });
    }
}

额外注意事项

  • 确保Firebase数据库规则允许当前应用读取users节点数据,否则会触发权限错误;
  • 可对用户输入做格式校验(如去除空格、统一大小写),避免因输入格式问题导致匹配失败;
  • 若需支持多条件组合查询,可遍历数据快照逐一验证多个字段,而非仅依赖单个orderByChild查询;
  • 建议添加加载状态提示,提升用户体验。

内容的提问来源于stack exchange,提问作者NANDISH C 2007023

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 12:16:00