2015-05-09 3 views
8

Я пытаюсь немного поиграть с Firebase и Android.
У меня есть один RegisterActivity и один MainActivity. Мой текущий поток - начните с MainActivity - проверьте, зарегистрирован ли пользователь, если нет, позвоните по телефону RegisterActivity - после регистрации звоните MainActivity.Где разместить функцию Firebase.setAndroidContext()

У меня возникли проблемы с тем, где положить звонок Firebase.setAndroidContext().
У меня 2 вопроса:

  1. Должен ли я только вызвать эту функцию один раз в Application или один раз в каждом Activty?
  2. Если ответ на вопрос 1 есть только один раз, то где его поставить?

Спасибо, Giora.

+0

почему вы не хотите начать регистра деятельности - проверка пользователя, вошедшего - если true: начните MainActivity? – mbelsky

+1

В соответствии с действующей документацией: * «В новом SDK больше не нужно вызывать Firebase.setAndroidContext(), поэтому вы можете удалить его из своего кода» * https://firebase.google.com/support/guides/ firebase-android - в разделе ** Настройка Контекста Android и включение автономной стойкости ** – gnB

ответ

16

Цитирую (шаг 4) инструктажа Firebase quickstart documentation:

Библиотека Firebase должен быть инициализирован один раз с Android Context.Это должно произойти до того, как будет создана или использована ссылка на Firebase.

Создать MyApplication.java:

public class MyApplication extends android.app.Application { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     //Previous versions of Firebase 
     Firebase.setAndroidContext(this); 

     //Newer version of Firebase 
     if(!FirebaseApp.getApps(this).isEmpty()) { 
      FirebaseDatabase.getInstance().setPersistenceEnabled(true); 
     } 
    } 
} 

и обновить имя значение параметра в AndroidManifest.xml:

<application 
     android:label="@string/app_name" 
     android:name=".MyApplication"> 
... 
</application> 
3

Как видно на рисунке sample applications из Firebase, вы должны поместить его в свой Application.

package com.firebase.androidchat; 

import com.firebase.client.Firebase; 

/** 
* @author Jenny Tong (mimming) 
* @since 12/5/14 
* 
* Initialize Firebase with the application context. This must happen before the client is used. 
*/ 
public class ChatApplication extends android.app.Application { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Firebase.setAndroidContext(this); 
    } 
} 

Source


Firebase.getAndroidContext()

После установки контекста приложения, когда вы можете использовать его там, где когда-либо вам это нужно. Вы можете получать его так часто, как вам нравится, везде. Я также рекомендовал бы использовать Firebase.getAndroidContext() вместо того, чтобы хранить его в переменных, чтобы предотвратить MemoryLeaks

+0

Спасибо за ваш ответ. Это тоже правильно, но я могу отметить только один как ответ. Спасибо за вашу помощь! – gioravered

+0

@gioravered я ответил первым: P, но не проблема. Также проверьте свои примеры приложений на github. они помогают вам;) – mikepenz

+0

@gioravered на самом деле другой ответ, который вы отметили как правильно, не отвечает на ваш первоначальный вопрос, как использовать 'getAndroidContext()' – mikepenz

2

Я не знаю FireBase, но я знаю, Android .. Context глобальная информация о среде приложения. Ваш Activity является Context, поэтому я уверен, что Firebase.getAndroidContext() получает ваше приложение Context, которое является getApplicationContext(), так как это кажется разумным.

Должен ли я использовать эту функцию только один раз в приложении или один раз в каждой активации?

вызов его всякий раз, когда вам нужно Context с отношени FireBase codes-, но я думаю, что подойдет лучше всего, если вы звоните его в Application классе

Если ответ на вопрос 1 только один раз, то где я должен это поставить?

Что делать, если это не один раз? где вы это называете? я думаю, вы назовете его в любом месте, где вам нужно Context? так что, что независимо от ответа на вопрос 1, но вы можете упасть на Class.this, getBaseContext() или View.getContext() в любое время

+0

Извините, я имею в виду setAndroidContext(), а не getAndroidContext(). – gioravered

+0

Хорошо, что upvote будет лелеять, хотя я все еще был на точке. Правильно? @gioravered – Elltz