请确保先调用 FirebaseApp.initializeApp(Context)。如何修复此错误?

3

我正在尝试使用Android Studio创建一个简单的Android应用程序,当我构建它时似乎没问题,但当我运行该应用程序时崩溃了。我被告知检查Logcat,结果显示FirebaseApp在我的主活动中未初始化。因此,我添加了以下代码:

FirebaseApp.initializeApp(this);

onCreate()中,我无法解决符号FirebaseApp的问题,请问我该怎么办才能解决这个问题?

这是我的Github链接:

https://github.com/radekkrowicki/Cv4

这是我的Mainactivity:

import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

import com.firebase.ui.auth.AuthUI;
import com.firebase.ui.database.FirebaseListAdapter;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.FirebaseDatabase;

public class MainActivity extends AppCompatActivity {
private static final int SIGN_IN_REQUEST_CODE = 111;
private FirebaseListAdapter<ChatMessage> adapter;
private ListView listView;
private String loggedInUserName = "";
private FirebaseAuth mAuth;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    FirebaseApp.initializeApp(this);

    //find views by Ids
    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    final EditText input = (EditText) findViewById(R.id.input);
    listView = (ListView) findViewById(R.id.list);

    if (FirebaseAuth.getInstance().getCurrentUser() == null) {
        // Start sign in/sign up activity
        startActivityForResult(AuthUI.getInstance()
                .createSignInIntentBuilder()
                .build(), SIGN_IN_REQUEST_CODE);
    } else {
        // User is already signed in, show list of messages
        showAllOldMessages();
    }

    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (input.getText().toString().trim().equals("")) {
                Toast.makeText(MainActivity.this, "Please enter some texts!", Toast.LENGTH_SHORT).show();
            } else {
                FirebaseDatabase.getInstance()
                        .getReference()
                        .push()
                        .setValue(new ChatMessage(input.getText().toString(),
                                FirebaseAuth.getInstance().getCurrentUser().getDisplayName(),
                                FirebaseAuth.getInstance().getCurrentUser().getUid())
                        );
                input.setText("");
            }
        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == R.id.menu_sign_out) {
        AuthUI.getInstance().signOut(this)
                .addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        Toast.makeText(MainActivity.this, "You have logged out!", Toast.LENGTH_SHORT).show();
                        finish();
                    }
                });
    }
    return true;
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == SIGN_IN_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            Toast.makeText(this, "Signed in successful!", Toast.LENGTH_LONG).show();
            showAllOldMessages();
        } else {
            Toast.makeText(this, "Sign in failed, please try again later", Toast.LENGTH_LONG).show();

            // Close the app
            finish();
        }
    }
}

private void showAllOldMessages() {
    loggedInUserName = FirebaseAuth.getInstance().getCurrentUser().getUid();
    Log.d("Main", "user id: " + loggedInUserName);

    adapter = new MessageAdapter(this, ChatMessage.class, R.layout.item_in_message,
            FirebaseDatabase.getInstance().getReference());
    listView.setAdapter(adapter);
}

public String getLoggedInUserName() {
    return loggedInUserName;
}
}

先提前感谢您的帮助。

2个回答

3

这一定是同步问题,您已正确初始化Firebase:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    FirebaseApp.initializeApp(this);
    ...
    ...
}

请确保清理并重新构建您的项目。

同时,请确保在/app/build.grade文件的末尾添加apply plugin: 'com.google.gms.google-services'

 dependencies {
    ...
    ...
}

apply plugin: 'com.google.gms.google-services'

我在依赖项之后添加了“apply plugin: 'com.google.gms.google-services'”,并且已经清理并重新构建了项目。但它仍然显示无法解析符号FirebaseApp。 - Radko Krowicki

0

刚刚克隆了你的仓库,一切看起来都很好,除了这一行:

classpath 'com.google.gms:google-services:4.1.0'

在项目级别的gradle文件中。

看起来像是那个版本的一个bug,我刚刚升级到了

classpath 'com.google.gms:google-services:4.2.0'

现在一切正常。你可以试试,如果有任何问题请告诉我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接