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

Android Firebase用户验证遇Cannot resolve method 'Snapshot(String)'错误

Android Firebase用户验证:解决两个核心问题

问题1:「Cannot resolve method 'Snapshot(String)'」错误

你代码里的Snapshot(kullaniciadiinput.getText().toString())是完全错误的写法:

  • 不存在名为Snapshot()的方法,你需要调用DataSnapshot对象的child()方法,用来定位到对应用户名的节点
  • 参数里的DataSnapshot实例是小写的snapshot,不是大写的Snapshot

正确写法应为snapshot.child(kullaniciadiinput.getText().toString())

问题2:「user变量未被使用」提示

你获取了User user对象但未实际使用,反而调用静态的getPassword()方法,这是逻辑错误:

  • 静态方法getPassword()无法返回当前用户的密码,必须调用实例对象的getPassword()方法,即user.getPassword()
  • 这样user变量会被实际使用,IDE的未使用提示也会消失

修复后的完整代码

package com.example.ise435finalv2;

import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

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

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.ValueEventListener;

import Model.User;

public class giris extends AppCompatActivity {
    EditText kullaniciadiinput, sifreinput;
    Button Girisyap;

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

        sifreinput = findViewById(R.id.sifreinput);
        kullaniciadiinput = findViewById(R.id.kullaniciadiinput);
        Girisyap = findViewById(R.id.Girisyap);

        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference table_user = database.getReference("User");

        Girisyap.setOnClickListener((View view) -> {
            final ProgressDialog mDialog = new ProgressDialog(giris.this);
            mDialog.setMessage("Please wait");
            mDialog.show();

            table_user.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {
                    String username = kullaniciadiinput.getText().toString().trim();
                    // 修复1:使用snapshot.child()定位用户节点
                    if (snapshot.child(username).exists()) {
                        mDialog.dismiss();
                        // 修复2:获取User实例并调用其getPassword方法
                        User user = snapshot.child(username).getValue(User.class);
                        if (user != null && user.getPassword().equals(sifreinput.getText().toString().trim())) {
                            Toast.makeText(giris.this, "Giris basarili", Toast.LENGTH_SHORT).show();
                        } else {
                            Toast.makeText(giris.this, "Sifre yanlis", Toast.LENGTH_SHORT).show();
                        }
                    } else {
                        mDialog.dismiss();
                        Toast.makeText(giris.this, "Kullanici bulunamadi", Toast.LENGTH_SHORT).show();
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError error) {
                    mDialog.dismiss();
                    Toast.makeText(giris.this, "Veritabani hatasi: " + error.getMessage(), Toast.LENGTH_SHORT).show();
                }
            });
        });
    }
}

额外优化说明

  1. 对输入内容做trim()处理,避免用户输入空格导致匹配失败
  2. 在onCancelled()方法中关闭进度对话框并提示错误,提升用户体验
  3. 增加user != null的空判断,防止数据解析失败引发空指针异常
  4. 你的Firebase JSON结构中,User节点下直接以用户名作为子节点,修复后的代码逻辑可以准确匹配该结构

内容的提问来源于stack exchange,提问作者Kenan Kayıkci

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 08:25:24