2012-12-12 52 views
2

我在一個項目中第一次使用RoboGuice,並試圖注入一個靜態變量,但變量保持爲空。以下是我正在測試的某個快速模型:RoboGuice和靜態變量注入

public class MyActivity extends RoboFragmentActivity { 

    @Override protected void onCreate(Bundle savedInstanceState) { 
     MyObject.print(); 
    } 
} 


@ContextSingleton 
public class MyObject { 

    @Inject static AssetManager sAssetManager; 

    public static void print() { 
     if(sAssetManager == null) { 
     Log.d("debug", "AssestManager is null"); 
     } else { 
     Log.d("debug", "AssetManager was injected"); 
     } 
    } 
} 

我該如何做這項工作?

閱讀

我知道這是不是最好的做法 - 這是使用RoboGuice方面更多的是學習的過程。只有在回答問題的答案時纔回答,而不是「你爲什麼這樣做」。

回答

1

爲什麼使用static方法/變量?這不是正確的做法。你應該@Inject MyObjectMyActivity。那麼你可以做myObjectInstance.print();。請注意,RoboGuice在setContentView()之後執行注射,除非您強制執行。

+0

有一種感覺,這種類型的答案即將到來。我通常不會這樣做。我需要這個的原因很難解釋,這只是一個愚蠢的例子,以及學習RoboGuice的經驗。顯然我知道我通常不會這樣做。只是尋找這個問題的答案 - 不是最佳做法。 – jjNford

+0

我認爲在我們通常認爲最糟糕的。無論如何,我相信你仍然需要首先注入'MyObject',這樣才能注入字段。你嘗試過嗎? – dmon

+0

是的 - 所以我只想在這種情況下注入AssetManager對象。但由於某種原因,它仍然是空的......不知道是因爲'靜態'關鍵字,還是MyObject找不到上下文的面孔 - 但我認爲AssetManager的Provider僅使用了應用程序上下文。 – jjNford