2015-05-09 156 views
8

我想玩一點Firebase和Android。
我有一個RegisterActivity,和一個MainActivity。 我目前的流程是 - 從MainActivity開始 - 檢查用戶是否已註冊,如果沒有,請撥打RegisterActivity - 註冊後致電MainActivity把Firebase.setAndroidContext()函數放在哪裏

我遇到了撥打Firebase.setAndroidContext()致電的問題。
我有2個問題:

  1. 我應該只調用這個函數中的每個ActivtyApplication一次或一次?
  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

的火力地堡庫必須使用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

從Firebase的sample applications中可以看出,您應該將其放入您的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

我不知道火力點,但我知道的Android ..一個Context是有關應用程序環境中的全局信息。你的ActivityContext所以我很確定Firebase.getAndroidContext()檢索你的應用程序Context這是getApplicationContext(),因爲這似乎是明智的。

我是否應該只在應用程序中調用該函數或在每個Activty中調用一次?

調用它,只要你需要方面火力codes-一個Context,但我認爲,如果你在你的Application

叫它將適合最好的,如果問題1的答案是唯一的一次,然後我應該在哪裏放?

如果它不是一次?你在哪裏打電話?我想你會打電話給你需要的任何地方Context對不對?這樣做,不管問題1的答案,但你可以落在Class.thisgetBaseContext()View.getContext()隨時

+0

對不起,我的意思是setAndroidContext()而不是getAndroidContext()。 – gioravered

+0

即使我仍然在點..lol正確嗎?我會珍惜upvote嗎?@gioravered – Elltz