W/System: Ignoring header X-Firebase-Locale because its value was null

回答 26 浏览 10.1万 2020-11-07

我对android studio非常陌生。我试图用Firebase制作一个带有电子邮件和密码验证的注册页面。但是,每当我试图点击注册按钮时,它就会给出。

W/System:忽略了头文件X-Firebase-Locale,因为它的值是空的。

有谁能告诉我为什么吗?

这里是SignupActivity.java文件。

package com.example.traintrack;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

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

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.textfield.TextInputLayout;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

import java.util.regex.Pattern;

public class SignupActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
    FirebaseAuth fAuth;
    Button signupBtn;       // Signup Button
    private String userType;
    private TextInputLayout textInputFullName;
    private TextInputLayout textInputEmail;
    private TextInputLayout textInputPassword;
    private boolean submitted = false, validUser = false;
    Spinner spinner;
    public static final Pattern VALID_EMAIL_ADDRESS_REGEX =
            Pattern.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$", Pattern.CASE_INSENSITIVE);

    private String email;
    private String password;


    //Validating the signup page
    private boolean validateName(){
        String name = textInputFullName.getEditText().getText().toString().trim();

        if (name.isEmpty()){
            textInputFullName.setError("Field can't be empty");
        } else{
            textInputFullName.setError(null);
            return true;
        }

        return false;
    }
    private boolean validateEmail(){

        String email = textInputEmail.getEditText().getText().toString().trim();

        if (email.isEmpty()){
            textInputEmail.setError("Field can't be empty");
        } else if (!VALID_EMAIL_ADDRESS_REGEX.matcher(email).find()){
            textInputEmail.setError("Please enter a valid email");
        } else {
            textInputEmail.setError(null);
            return true;
        }
        return false;
    }

    private boolean validatePassword(){
        String password = textInputPassword.getEditText().getText().toString().trim();
        if (password.isEmpty()){
            textInputPassword.setError("Field can't be empty");
        } else if (password.length() < 8){
            textInputPassword.setError("Password must have at least 8 characters");
        } else {
            return true;
        }
        return false;
    }

    //public void confirm(View button){

    //}



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

        spinner = findViewById(R.id.signup_type);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.user_types, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(this);

        textInputFullName = findViewById(R.id.signup_fullname);
        textInputEmail =  findViewById(R.id.signup_email);
        textInputPassword =  findViewById(R.id.signup_password);
        signupBtn = findViewById(R.id.signup_confirm);


        //Firebase, Sign up by clicking the button
        fAuth = FirebaseAuth.getInstance();

        if (fAuth.getCurrentUser() != null)  // when the current user object is already present
          {
             startActivity(new Intent(getApplicationContext(), MainActivity.class));  //back to main page
             finish();
          }

        //register the user in firebase
        signupBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                password = textInputPassword.getEditText().getText().toString().trim();
                email = textInputEmail.getEditText().getText().toString().trim();

                // I have moved the validation here since this is the button for click
                submitted = true;
                if (!validateName() || !validateEmail() || !validatePassword() || !validUser){
                    Toast.makeText(SignupActivity.this, "Cannot create account", Toast.LENGTH_SHORT).show();
                    return;
                }


                fAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) //successfully created the user
                            {
                            Toast.makeText(SignupActivity.this, "Account created!", Toast.LENGTH_SHORT).show();
                            startActivity(new Intent (getApplicationContext(), MainActivity.class));
                            } else {

                            Toast.makeText(SignupActivity.this, "Error !", Toast.LENGTH_SHORT).show();
                        }
                    }
                });

            }
        });




    }//OnCreated Closing


    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        String type = parent.getItemAtPosition(position).toString();
        if (type.equals(getResources().getStringArray(R.array.user_types)[0]) && submitted){
            TextView errorText = (TextView)spinner.getSelectedView();
            errorText.setError("");
            errorText.setTextColor(Color.RED);
            errorText.setText("Please select a user type");
        } else {
            validUser = true;
            userType = type;
        }
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }

}  //Ending
'''
user14245642 提问于2020-11-07
我在物理设备上使用wifi看到了同样的问题。但在打开手机服务的设备上,我没有看到警告。如果你使用手机数据会怎样?ezaspi 2020-11-28
你可以在这里关注这一个答案,stackoverflow.com/a/64657110John Melody Me 2021-05-12
26 个回答
#1楼
得票数 23

确保仿真器连接到互联网。有时WIFI打开了,但没有连接到互联网。我就是这样解决的。

Fergal O Connor 提问于2020-11-18
#2楼
得票数 12

你是否在Firebase控制台中启用了电子邮件/密码登录方式?

Firebase Console

Anthony Mark 提问于2020-11-10
MendelG 修改于2021-05-19
#3楼
得票数 11

在manifest.xml中的application标签内添加这一行。

android:usesCleartextTraffic="true"
Shashikanta Moirangthem 提问于2020-12-02
Community 修改于2020-12-04
#4楼
得票数 5

筹备工作

  1. 检查你的仿真器是否有访问互联网的权限,并且也连接到了互联网。
  2. 你的firebase控制台中的电子邮件/密码登录方法已被启用,以获得访问权。

步骤1:创建sha1密钥+调试密钥信息+添加firebase.你的sha1密钥可能只有发布密钥的正常信息,我猜?

步骤2:console.cloud.google.com激活安卓设备验证,并插入由firebase自动生成的sha钥匙+其匹配的偏好(如package name......)。

归纳

在我看来,你的代码看起来不错!一切设置都是正确的。我认为你忘记了一些琐碎的设置或正确的sha键。

Etienne Kaiser 提问于2021-04-07
tripleee 修改于2021-10-31
我如何检查仿真器是否有访问互联网的权限?zepolyerf 2022-01-12
#5楼
得票数 4

当我写了一个超过6个字符的密码时,它对我很有效。

因此,请确保你的密码至少有6个字符的长度。

Anderson Eliú Sincal Julian 提问于2021-03-08
Tomerikoo 修改于2021-10-31
#6楼
得票数 3

我只有在Android Studio上使用模拟器时才有这个问题。我搜索并测试了一下,发现当我用自己的手机来启动我的应用程序时,这个问题并没有出现。就像在我之前有人说的那样,这可能是因为模拟器上的wifi连接问题。

(我对Android Studio比较陌生,我只是分享了我的解决方法,希望对你有帮助。)

用这个在自己的设备上使用你的应用程序。https://developer.android.com/studio/run/device

suaibeu 提问于2020-11-20
#7楼
得票数 2

我做的一个应用也出现了这个错误,我认为错误在于密码的长度,因为如果密码少于六位数,firebase认证服务就会出现提交错误,试着改变长度吧!"他说。

我得出这个结论是因为我打印了来自addOnCompleteListener的it.exception的值,它告诉我"密码必须至少是6个字符"。

Nicolas Baez Mora 提问于2021-05-21
#8楼
得票数 2

确保你没有在应用程序中注册那个电子邮件地址。 你可以在你的Firebase项目的用户部分找到它。 如果该地址在那里,在用户部分。 删除它,然后再次运行应用程序,现在注册应该工作了。 这对我来说是有效的。

Priyanshu Paliwal 提问于2021-06-10
#9楼
得票数 1

我通过创建一个带有调试密钥信息的sha1密钥,并添加firebase,解决了我的问题。

然后我从console.cloud.google.com激活了"Android设备验证",并输入了firebase自动添加的sha键,并添加了必要的定义(包名等)。

JonathanLNB 提问于2021-02-04
#10楼
得票数 1

它没有从Firebase获取当前的用户UID。所以,产生了这些错误。 你需要先检查这些。

final User user = FirebaseAuth.instance.currentUser;
final uid = user.uid;
jaimin rana 提问于2021-03-25
Ashwini Shahapurkar 修改于2021-03-25
#11楼
得票数 1

你可以写"it.exception?.printStackTrace()",你就可以知道问题出在哪里。例如,我写了它,我发现了问题,我知道我没有写够字符------。

W/System.err: com.google.firebase.auth.FirebaseAuthWeakPasswordException。给出的密码是无效的。[密码应该至少是6个字符] 。

Murad Əziz 提问于2021-05-21
#12楼
得票数 0

我遇到了和你一样的错误。在我的例子中,我改变了Firebase项目。 我在android studio中做了清理,它工作了。google-services.json文件在android studio中生成了自动生成的字符串。它必须被清理掉。

Jacob Choi 提问于2021-01-01
#13楼
得票数 0

我有同样的错误,但使用Firebase Auth的电子邮件和密码,一旦你在Firebase控制台删除所有关于电子邮件和密码的内容,这个错误似乎悄然而至,我使用添加用户按钮创建了一个假用户,错误从未消失,但我能够将数据添加到Firebase 该用户按钮

Felex Kuria 提问于2021-02-18
#14楼
得票数 0

我有一个具有相同电子邮件地址的账户,所以我从"认证用户"和"数据库数据"中删除了它,问题就解决了!"我说到。

Hamee 提问于2021-02-18
#15楼
得票数 0

解决我的问题的是,Firebase将其最新的flutter SDK版本升级为null safety,所以也将所有的Firebase产品如firebase messaging等升级为null safety。 所以升级我所有的依赖项,特别是firebase_auth和flutter最新的稳定SDK版本,对我来说是很有帮助的。

Shalabyer 提问于2021-03-04
Shalabyer 修改于2021-03-10
#16楼
得票数 0

一个屏幕的构造器向另一个屏幕发送数据,所以请安排与一个屏幕的构造器向另一个屏幕的构造器的功能总是相同的*。

另一种可能性

电子邮件和密码错误地添加了一点额外的空间,所以请添加这种类型的用户电子邮件和密码。

email.toString.trim();
password.toString.trim();
mewadaarvind 提问于2021-03-16
#17楼
得票数 0

你可能在你的活动的主函数中缺少一个变量的实例化。Android studio对细节非常挑剔。如果你把它声明为一个变量,你需要在代码的某个地方把它实例化。

croesus 提问于2021-03-25
#18楼
得票数 0

重新安装模拟器,并尝试用Play Store应用程序维护模拟器。

faribakhandani 提问于2021-06-14
#19楼
得票数 0

我也面临同样的问题,我只是卸载了应用程序,然后重新安装,这就解决了问题。

Mohamed Mohy 提问于2021-10-24
#20楼
得票数 0

使用以下代码行来检查出你使用task.getException().getMessage()方法的错误类型。要么使用敬酒信息,要么使用System.out.println("Error"+);

mAuth.createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        FirebaseUser user = mAuth.getCurrentUser();
                        Toast.makeText(SignUp.this, "Success.",
                                Toast.LENGTH_SHORT).show();
                    } else {
                        // If sign in fails, display a message to the user.
                        Toast.makeText(SignUp.this, "Error"+ task.getException().getMessage(), Toast.LENGTH_LONG).show();
                    }
                }
            });

我得到的错误信息是::

发生了一个内部错误,[API密钥无效,请传递一个有效的API密钥]。

解决方法:在项目级gradle中改变classpath,并同步你的项目,然后重新进行安装。

classpath 'com.google.gms:google-services:4.3.0'
Thiran Hettiarachchi 提问于2021-10-29
#21楼
得票数 0

我所做的是,在Android Manifest文件中,确保连接到Firebase的Java类被声明低于声明主活动类的那一行。

Faizan 提问于2021-01-27
Tomerikoo 修改于2021-10-31
#22楼
得票数 0

我遇到过很多次这样的问题,在耐心等待了一段时间后,它还算工作BUT控制台向我抛出了这样的通知。

W/System  ( 6027): Ignoring header X-Firebase-Locale because its value was null.

E/flutter ( 6027): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: setState() called after dispose(): _SignupPageState#633fd(lifecycle state: defunct, not mounted)

E/flutter ( 6027): The preferred solution is to cancel the timer or stop listening to the animation in the dispose() callback. Another solution is to check the "mounted" property of this object before calling setState() to ensure the object is still in the tree.

E/flutter ( 6027): This error might indicate a memory leak if setState() is being called because another object is retaining a reference to 
this State object after it has been removed from the tree. To avoid memory leaks, consider breaking the reference to this object during dispose().

所以,为了应对这个错误,我在the textField的形式中加入了额外的if mounted语句,就像这样。

TextFormField(
    validator: (val) => val!.isEmpty ? 'Enter Email' : null,
    onChanged: (val) {
       if (mounted) {
           setState(() => email = val);  //the email will trow to String that will give to firebaseAuth
       }
    },
    keyboardType: TextInputType.emailAddress,
),

如果你在这种情况下遇到了和我一样的问题,我希望它也能为你所用......*欢呼吧

DVCone 提问于2021-12-04
#23楼
得票数 0

因为你正试图在你的Firebase auth列表中注册一个账户,去firebase console -> authentication -> users,然后删除该用户。再试着用该用户注册(就一次,如果你用该用户重复注册,就会再次出现这个错误)。

sfmirtalebi 提问于2021-01-24
sfmirtalebi 修改于2021-12-16
#24楼
得票数 0

有同样的问题,我在Firebase控制台中缺少动态链接的配置。

Danny Cortés Velandia 提问于2022-01-19
#25楼
得票数 0

我收到了这个警告。

忽略了头信息X-Firebase-Locale,因为它的值是空的。

因为我试图在认证5分钟后删除一个Firebase auth账户。经过一番调查,我也得到了一个FirebaseAuthRecentLoginRequiredException提供这样的消息。

该操作是敏感的,需要最近的认证。在重试此请求之前,请再次登录。

为了解决这个问题,我必须使用FirebaseUser.reauthenticate(AuthCredential)

Alex Mamo 提问于2022-05-03
#26楼
得票数 0

不是真正的解决方案,但在按下按钮后尝试等待,因为我得到了这样的错误。

Ignoring header X-Firebase-Locale because its value was null.

但在我搜索解决方案未果回来后,我发现了这个,而且用户已经登录了。

enter image description here

Montekar 提问于2022-09-07