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(); } }); }); } }
额外优化说明
- 对输入内容做
trim()处理,避免用户输入空格导致匹配失败 - 在
onCancelled()方法中关闭进度对话框并提示错误,提升用户体验 - 增加
user != null的空判断,防止数据解析失败引发空指针异常 - 你的Firebase JSON结构中,
User节点下直接以用户名作为子节点,修复后的代码逻辑可以准确匹配该结构
内容的提问来源于stack exchange,提问作者Kenan Kayıkci
相关产品推荐
相关产品推荐

