【问题标题】:Querying Firebase Database with Android studio使用 Android Studio 查询 Firebase 数据库
【发布时间】:2016-12-08 16:28:32
【问题描述】:

我正在尝试使用 firebase 数据库登录,其中我已经存储了一些数据。

所以我需要发布某种查询来搜索与输入凭据匹配的特定节点作为输入,并查看其参考键以进行确认。 这是我的代码,它似乎并不成功,因为它总是针对异常情况并给出错误祝酒词。 我非常有义务为我的问题找到解决方案。

public class LogInActivity extends AppCompatActivity {

    DatabaseReference Rootref = FirebaseDatabase.getInstance().getReference();
    DatabaseReference mwritefarmref = Rootref.child("WRITE FARM");
    DatabaseReference muserprofilestab = mwritefarmref.child("USER PROFILES");

    EditText mobinputtext;
    EditText passwordinputtext;
    TextView tv;

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

        mobinputtext = (EditText) findViewById(R.id.mobinputtext);
        passwordinputtext = (EditText) findViewById(R.id.passinputtext);
        tv = (TextView) findViewById(R.id.textView);

        Button submitbutton = (Button) findViewById(R.id.submitbutton);
        submitbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                try {
                    DatabaseReference muserid = (DatabaseReference) muserprofilestab.orderByChild("Mobile number").equalTo(mobinputtext.getText().toString());
                    tv.setText(muserid.getKey());
                }catch (Exception e){
                    Toast.makeText(LogInActivity.this, "ERROR!!", Toast.LENGTH_SHORT).show();
                }
            }
        });

    }
}

【问题讨论】:

  • 我将首先更改您的数据库结构。另外,请避免在keys 中有空格。使用 camelCaseLetters。
  • 哦!感谢您的建议! :D
  • 但是现在有没有办法在这个数据库本身上执行所需的操作?!
  • 我不明白这个问题。可以重新装帧吗?我相信,只要你说清楚,我可以为你的问题提供解决方案......
  • 就像从上面的数据库中,当我得到任何用户输入的手机号码时,我想导出并显示出相应的父键节点。例如:当用户输入手机号码“9705050504”时,应用应显示父键,即“31201000004”

标签: android firebase firebase-realtime-database


【解决方案1】:

您不能将查询强制转换为 DatabaseReference。而不是:

DatabaseReference muserid = (DatabaseReference) muserprofilestab.orderByChild("Mobile number").equalTo(mobinputtext.getText().toString());

这样做:

Query myquery = muserprofilestab.orderByChild("Mobile number").equalTo(mobinputtext.getText().toString());

【讨论】:

  • 非常感谢您的回复! :) 但是我已经尝试过了......一旦我添加了这样的查询,然后输出获得的查询的 KEY,它返回“USER PROFILES”,而我们想要的是“3120100004” Soooo?
【解决方案2】:

Firebase 不是关系数据库。这是一个 NOSql 数据库。事情在这里有点不同。速度是最终目标,而不是他们所说的空间!
如果要根据移动无输入检索父密钥,则在根下创建另一个节点“MobileNoDetails”。在“MobileNoDetails”节点下存储用户手机号码作为密钥,并在其下存储用户父密钥“31201000004”。这样您就可以在输入手机号码时检索用户父密钥。

【讨论】:

  • 好的,非常感谢!我绝对明白你的意思。我绝对可以通过这个过程。 :) 但是你可能知道,它是一种相对非常复杂的方法。因此,最终是否不可能按照我尝试的方式完成它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多