2012-12-12 29 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