java.lang.RuntimeException: Невозможно начать действие ComponentInfo Убедитесь, что сначала вызван FirebaseApp.initializeApp (Context) - PullRequest
0 голосов
/ 28 мая 2018

Видя это много, но не повезло, пока я не прочитал Возьмите под контроль свой Firebase Init на Android

Поэтому, когда я добавляю упомянутый блок кода, мое приложение не работает постоянносбой, когда я нажимаю Войти или Зарегистрироваться.

Не вылетает при добавлении в RegistrationActivity.java

FirebaseOptions.Builder builder = new FirebaseOptions.Builder()
   .setApplicationId("1:0123456789012:android:0123456789abcdef")
   .setApiKey("your_api_key")
   .setDatabaseUrl("https://your-app.firebaseio.com")
   .setStorageBucket("your-app.appspot.com");
FirebaseApp.initializeApp(this, builder.build());

Я не могу войти после входа в мой пользователь Firebase, но это потому, что я никогда не заполнял свои значения Firebase из примерате, которые даны моим значениям БД.Но я запутался, почему мое приложение не сразу аварийно завершает работу с этим блоком кода для моего RegistrationActivity.Java, но когда я его комментирую, я получаю сообщение об ошибке, указанное в заголовке.

Может кто-нибудь объяснить, какЯ могу заставить мой оригинальный код работать без блока кода выше, или это новый способ?Все мои проблемы начались, когда я начал возиться с моими файлами Gradle, так что это то, где я нахожусь сегодня.TIA.

Вот мой проект Gradle

buildscript {

ext.versions = [
        'compileSdk'    : 27,
        'targetSdk'     : 27,
        'buildTools'    : '27.0.3',
//            'butterknife'   : '8.8.1',
//            'glide'         : '4.6.1',
//            'kotlin'        : '1.2.21',
//            'retrofit'      : '2.3.0',
//            'supportLibrary': '27.0.2'
]

repositories {
    google()
    jcenter()
}

dependencies {
    classpath 'com.android.tools.build:gradle:3.1.2'
    classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:4.5.4'
    //classpath 'com.google.gms:google-services:3.1.0'
}
allprojects {
    repositories {
        jcenter()
        maven { url "https://maven.google.com" }// Google's Maven repository
    }
}
}

Вот мой модуль App Gradle применить плагин: 'com.android.application'

android {
compileSdkVersion versions.compileSdk
buildToolsVersion versions.buildTools

defaultConfig {
    applicationId "com.example.tinder"
    minSdkVersion 26
    targetSdkVersion 27
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner 
"android.support.test.runner.AndroidJUnitRunner"
    multiDexEnabled true
}
buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android-
optimize.txt'), 'proguard-rules.pro'
    }
    customDebug {
        debuggable true
    }
}

}

repositories {
google()
jcenter()
}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support:cardview-v7:27.1.1'
implementation 'com.android.support:support-v4:27.1.1'
implementation 'com.android.support:support-annotations:27.1.1'

implementation 'com.google.firebase:firebase-core:15.0.2'
implementation 'com.google.firebase:firebase-auth:15.1.0'
implementation 'com.google.firebase:firebase-storage:15.0.2'
implementation 'com.google.firebase:firebase-database:15.0.1'

implementation 'com.github.bumptech.glide:glide:4.7.1'
implementation 'com.lorentzos.swipecards:library:1.0.9'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'

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

Вот мойRegistrationActivity.java пакет com.example.tinder;

import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import java.time.Instant;
import java.util.HashMap;
import java.util.Map;

public class RegistrationActivity extends AppCompatActivity {
private Button mRegister;
private EditText mEmail, mPassword, mName;
private RadioGroup mRadioGroup;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener firebaseAuthStateListener;

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

//
//        FirebaseOptions.Builder builder = new FirebaseOptions.Builder()
//                            

 //  .setApplicationId("1:0123456789012:android:0123456789abcdef")
//                .setApiKey("your_api_key")
//                .setDatabaseUrl("https://your-app.firebaseio.com")
//                .setStorageBucket("your-app.appspot.com");
//        FirebaseApp.initializeApp(this, builder.build());

    mAuth = FirebaseAuth.getInstance();
    firebaseAuthStateListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            final FirebaseUser user =     
FirebaseAuth.getInstance().getCurrentUser();
            if (user != null) {
                Intent intent = new Intent(RegistrationActivity.this, 
MainActivity.class);
                startActivity(intent);
                finish();
                return;
            }
        }
    };

    mRegister = (Button) findViewById(R.id.register);

    mEmail = (EditText) findViewById(R.id.email);
    mPassword = (EditText) findViewById(R.id.password);
    mName = (EditText) findViewById(R.id.name);
    mRadioGroup = (RadioGroup) findViewById(R.id.radioGroup);


    mRegister.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            int selectId = mRadioGroup.getCheckedRadioButtonId();
            final RadioButton radioButton = (RadioButton) 
findViewById(selectId);
            if(radioButton.getText() == null){
                return;
            }

            final String email = mEmail.getText().toString();
            final String password = mPassword.getText().toString();
            final String name = mName.getText().toString();
            mAuth.createUserWithEmailAndPassword(email, 
 password).addOnCompleteListener(RegistrationActivity.this, new 
 OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if(!task.isSuccessful()){
                        Toast.makeText(RegistrationActivity.this, "sign up 
 error", Toast.LENGTH_SHORT).show();
                    }else{
                        String userId = mAuth.getCurrentUser().getUid();

                        DatabaseReference currentUserDb = 
 FirebaseDatabase.getInstance().getReference().child("Users").child(userId);
                        Map userInfo = new HashMap<>();
                        userInfo.put("name" , name);
                        userInfo.put("gender", 
 "Male");//radioButton.getTag().toString());
                        userInfo.put("profileImageUrl", "default");
                        currentUserDb.updateChildren(userInfo);
                    }
                }
            });
        }
    });
}

@Override
protected void onStart() {
    super.onStart();
    mAuth.addAuthStateListener(firebaseAuthStateListener);

}

@Override
protected void onStop() {
    super.onStop();
    mAuth.removeAuthStateListener(firebaseAuthStateListener);
}
}

Вот мой MainActivitiy.java

package com.example.tinder;
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
   import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
   import android.widget.ListView;
    import android.widget.Toast;

   import com.google.firebase.auth.FirebaseAuth;
    import com.google.firebase.auth.FirebaseUser;
    import com.google.firebase.database.ChildEventListener;
    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 com.lorentzos.flingswipe.SwipeFlingAdapterView;

    import java.util.ArrayList;
    import java.util.List;

    public class MainActivity extends AppCompatActivity {


private cards cards_data[];
private arrayAdapter arrayAdapter;
private int i;
private FirebaseAuth mAuth;
private String currentUId;
private DatabaseReference usersDb;




ListView listView;
List<cards> rowItems;

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

    usersDb = FirebaseDatabase.getInstance().getReference().child("Users");

    mAuth = FirebaseAuth.getInstance();
    currentUId = mAuth.getCurrentUser().getUid();
    checkUserPreferences();


    rowItems = new ArrayList<cards>();

    // al.add("javascript");
    // al.add("php");

    arrayAdapter = new arrayAdapter(this, R.layout.item, rowItems );
   // al.add("javascript");
   // arrayAdapter.notifyDataSetChanged();


    SwipeFlingAdapterView flingContainer = (SwipeFlingAdapterView)     
findViewById(R.id.frame);

    flingContainer.setAdapter(arrayAdapter);
    flingContainer.setFlingListener(new         

SwipeFlingAdapterView.onFlingListener() {
        @Override
        public void removeFirstObjectInAdapter() {
            // this is the simplest way to delete an object from the Adapter     
(/AdapterView)
            Log.d("LIST", "removed object!");
            rowItems.remove(0);
            arrayAdapter.notifyDataSetChanged();
            }

        @Override
        public void onLeftCardExit(Object dataObject) {
            //Do something on the left!
            //You also have access to the original object.
            //If you want to use it just cast it (String) dataObject


            cards obj = (cards) dataObject;
            String userId = obj.getUserId();

usersDb.child(userId).child("connections").child("pass").
child(currentUId).setValue(true);

            isConnectionMatch(userId);
            Toast.makeText(MainActivity.this,"Pass",     
Toast.LENGTH_SHORT).show();

            }

        @Override
        public void onRightCardExit(Object dataObject) {

            cards obj = (cards) dataObject;
            String userId = obj.getUserId();
            usersDb.child(userId).child("connections").child("meet").
child(currentUId).setValue(true);

            isConnectionMatch(userId);
            Toast.makeText(MainActivity.this,"Meet",     
Toast.LENGTH_SHORT).show();


            }

        @Override
        public void onAdapterAboutToEmpty(int itemsInAdapter) {
            // Ask for more data here
            }

        @Override
        public void onScroll(float scrollProgressPercent) {
            }
        }
    );


    // Optionally add an OnItemClickListener
    flingContainer.setOnItemClickListener(new 
SwipeFlingAdapterView.OnItemClickListener() {
        @Override
        public void onItemClicked(int itemPosition, Object dataObject) {

            Toast.makeText(MainActivity.this,"Clicked", 
Toast.LENGTH_SHORT).show();

            }
        }
    );
}

private void isConnectionMatch(String userId) {
    DatabaseReference currentUserConnectionsDb =     
usersDb.child(currentUId).child("connections").
child("meet").child(userId);
    currentUserConnectionsDb.addListenerForSingleValueEvent(new 
ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()){
                Toast.makeText(MainActivity.this, "New Match", 
Toast.LENGTH_LONG).show();
                usersDb.child(dataSnapshot.getKey()).child("connections").
child("matches").child(currentUId).setValue(true);

usersDb.child(currentUId).child("connections").child("matches").
child(dataSnapshot.getKey()).setValue(true);
                }
            }

        @Override
        public void onCancelled(DatabaseError databaseError) {

            }
        }
    );
}


private String userGender;
private String searchGender;

public void checkUserPreferences(){
    final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    DatabaseReference userDb = usersDb.child(user.getUid());
    userDb.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            if (dataSnapshot.getKey().equals(user.getUid())){
                if (dataSnapshot.exists()){
                    if (dataSnapshot.child("gender") != null){
                        userGender =     
dataSnapshot.child("gender").getValue().toString();
                        searchGender = "Female";
                        switch (userGender) {
                            case "Male":
                                searchGender = "Female";
                                break;
                            case "Female":
                                searchGender = "Male";
                                break;
                        }
                        getSearchGender();
                    }
                }

            }
        }
        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {
            }
        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {
            }
        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {
            }
        @Override
        public void onCancelled(DatabaseError databaseError) {
            }
        }
    );
}





public void getSearchGender(){
    usersDb.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            if (dataSnapshot.exists() && 
!dataSnapshot.child("connections").child("pass").hasChild(currentUId) && 
!dataSnapshot.child("connections").child("meet").hasChild(currentUId) && 
dataSnapshot.child("gender").getValue().toString().equals(searchGender)) {
                String profileImageUrl = "default";
                if
 (dataSnapshot.child("profileImageUrl").getValue().equals("default")) {
                    profileImageUrl = 
dataSnapshot.child("profileImageUrl").getValue().toString();
                    }
                cards item = new cards(dataSnapshot.getKey(), 
dataSnapshot.child("name").getValue().toString(), profileImageUrl);
                rowItems.add(item);
                arrayAdapter.notifyDataSetChanged();
                }
            }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    }
    );
}

public void logoutUser(View view) {
    mAuth.signOut();
    Intent intent = new Intent(MainActivity.this, 
ChooseLoginRegistrationActivity.class);
    startActivity(intent);
    finish();
    return;
    }

public void gotoSettings(View view) {
    Intent intent = new Intent(MainActivity.this, SettingsActivity.class);
    intent.putExtra("userGender", userGender);
    startActivity(intent);
    return;
    }
}

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Используя мои исходные файлы из этого поста, единственные необходимые изменения заключались в том, чтобы раскомментировать 1 строку и добавить еще одну (оба в файлах Gradle)

ПРОЕКТНОЕ ПРИЛОЖЕНИЕ раскомментировало строку gms и обновило версию с исходного поста

dependencies {
    classpath 'com.android.tools.build:gradle:3.1.2'
    classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:4.5.4'
    classpath 'com.google.gms:google-services:3.2.0'
}

МОДУЛЬНОЕ ПРИЛОЖЕНИЕ добавлено в самый низ файла

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

Мне также пришлось обновить версию google-сервиса до 3.2.0 с 3.0.1.Больше ничего не нужно было.Теперь я немного опередил мою первоначальную проблему, состоящую в том, что мое приложение вылетает после обновления (нажав кнопку ПОДТВЕРДИТЬ) на загруженной фотографии.Фотография хранится в базе данных Firebase, но я немного исправлю ее, прежде чем обращаться за дополнительной помощью.Спасибо за предложения @VIKAS SHARMA

0 голосов
/ 28 мая 2018

Вам просто нужно инициализировать firebase в файле приложения

, просто сделайте это:

private FirebaseAuth mAuth;
mAuth = FirebaseAuth.getInstance();
mAuth.signInWithEmailAndPassword(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
                Log.d(TAG, "signInWithEmail:success");
                FirebaseUser user = mAuth.getCurrentUser();
                updateUI(user);
            } else {
                // If sign in fails, display a message to the user.
                Log.w(TAG, "signInWithEmail:failure", task.getException());
                Toast.makeText(EmailPasswordActivity.this, "Authentication failed.",
                        Toast.LENGTH_SHORT).show();
                updateUI(null);
            }

            // ...
        }
    });

и дайте мне знать loggs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...