我是 RoboGuice 的新手,我正在尝试设置我的活动以使用 DI。但是,当我尝试使用它时没有任何反应。在我调用“super.onCreate(savedInstanceState);”后,我只得到一个没有内容的空白黑色窗口,也没有登录我的 Activity.onCreate() 方法;
请参阅以下 2 段代码:
public class ClikClokActivity extends RoboActivity{
@Inject
private TileAdapter tileAdapter;
@Inject
private GameLogicService gameLogicService;
@Inject
private GridOperationQueue gridOperationQueue;
private GridView gridView;
@Inject
private Handler handler;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
Log.v(this.getClass().toString(), "Entering onCreate");
super.onCreate(savedInstanceState);
Log.v(this.getClass().toString(), "Never logs this with RoboGuice");
setContentView(R.layout.main);
gridView = (GridView) findViewById(R.id.gridview);
gridView.setNumColumns(Constants.GRID_WIDTH);
gridView.setAdapter(tileAdapter);
Log.v(this.getClass().toString(), "GridView initialized");
gridOperationQueue.start();
Log.v(this.getClass().toString(), "Completed onCreate");
}
和
public class ClikClokApplication extends RoboApplication{
@Override
protected void addApplicationModules(List<Module> modules) {
modules.add(new ClikClokModule());
}
}
和
公共类 ClikClokModule 扩展 AbstractAndroidModule {
@Override
protected void configure() {
}
}
和
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.clikclok"
android:versionCode="1"
android:versionName="1.0">
<application android:name="com.clikclok.ClikClokApplication" android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".ClikClokActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
如果您查看上面的代码,我永远不会得到第二次日志记录。但是,如果我要从 Activity 扩展并从清单中删除 android:name="com.clikclok.ClikClokApplication" 属性,那么我确实会得到第二个日志记录(尽管由于没有执行初始化,NullPointers 失败)。
那么 super.onCreate(savedInstanceState); 中可能会发生什么?这导致我的应用程序无法工作?
谢谢
从上面更新:
我花了很多时间对此进行调查,现在使用 Eclipse 的调试器可以看到我的代码似乎挂在 RoboGuice 中的什么位置。
以下代码来自 InjectorImpl 类:
public void injectMembers(Object instance) {
// Reaches here but...
MembersInjector membersInjector = getMembersInjector(instance.getClass());
// ....this comment is never reached
membersInjector.injectMembers(instance);
}
因此,我使用调试器深入研究了 Guice 3.0 代码并进入了 FailableCache 类:
public V get(K key, Errors errors) throws ErrorsException {
// Reaches here....
Object resultOrError = delegate.get(key);
// ...but not here
if (resultOrError instanceof Errors) {
errors.merge((Errors) resultOrError);
throw errors.toException();
} else {
@SuppressWarnings("unchecked") // create returned a non-error result, so this is safe
V result = (V) resultOrError;
return result;
}
}
这怎么可能只是在从地图中检索密钥时挂起?我对代码不够熟悉,排除故障很混乱。任何建议表示赞赏。