База данных Firebase не работает на эмуляторе android - PullRequest
3 голосов
/ 02 августа 2020

Мое приложение проверяет наличие определенных данных в базе данных Firebase Realtime с добавлением addListenerForSingleValueEvent в ссылку на базу данных. Эмулятор, в котором я начал проект, работает нормально и отлично извлекает данные, но когда я меняю эмулятор (скажем, я переключаюсь на PIXEL 3XL), слушатель не работает. Я видел в другом вопросе stackoverflow, что у кого-то была такая же проблема, и база данных извлекла данные, но через долгое время. кто-нибудь знает, почему это произошло? Следует ли мне продолжать разработку с эмулятором по умолчанию и не беспокоиться о том, что база данных реального времени не работает на другом эмуляторе? Вы можете объяснить, почему это происходит?

Я использую это в манифесте: ...<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>...

Gradle

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.0.1"
        classpath 'com.google.gms:google-services:4.3.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

gradle (Module)

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

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.1"

    defaultConfig {
        applicationId "..."
        minSdkVersion 28
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.google.firebase:firebase-database:19.3.1'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

}

Редактировать 1: Добавлен код (он работает на эмуляторе по умолчанию, пиксель 3, но не на другом). Журналы нужны только для того, чтобы увидеть, делает ли код то, что он должен.

DatabaseReference database, newRef;

 protected void onCreate(Bundle savedInstanceState) {
(...)
database = FirebaseDatabase.getInstance().getReference();
newRef = database.child(option).child(strSelectedYear).child(strSelectedMonth).child(strSelectedDay);
        newRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot d: dataSnapshot.getChildren()) {
                    hours.remove(d.getKey());
                    Log.i("hAI FRAAA", d.getKey());

                }
                String msg = "";
                for (int j = 0;j<hours.size();j+=1)
                    msg += " " + hours.get(j);
                Log.i("Free hours", msg);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
}

1 Ответ

2 голосов
/ 02 августа 2020

Вам нужно будет самостоятельно устранить некоторые неполадки, чтобы понять, что происходит не так. Я бы сделал несколько шагов:

  1. Перестаньте игнорировать возможные ошибки и внедрите onCancelled. Как минимум, это должно быть public void onCancelled(@NonNull DatabaseError databaseError) { throw databaseError.toException(); }.
  2. Убедитесь, что доступ inte rnet работает на втором эмуляторе. Так работают ли другие приложения?
  3. Включение ведения журнала отладки и проверка в выводе logcat, что происходит.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...