【问题标题】:Nothing happens when I configure RoboGuice配置 RoboGuice 时没有任何反应
【发布时间】:2011-11-05 04:54:09
【问题描述】:

我是 RoboGuice 的新手,我正在尝试设置我的活动以使用 DI。但是,当我尝试使用它时没有任何反应。在我调用“super.onCreate(savedInstanceState);”后,我只得到一个没有内容且没有登录我的 Activity.onCreate() 方法的空白黑色窗口

查看这 2 个 sn-ps 代码:

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;
}

}

这怎么可能只是在从地图中检索密钥时挂起?我对代码不够熟悉,排除故障很混乱。 任何建议表示赞赏。

【问题讨论】:

  • 似乎无法记录第二行的唯一方法是您的应用在日志 1 和日志 2 之间崩溃。您的日志中是否有任何错误?
  • 日志中绝对没有。这就是为什么我完全迷失在这里
  • 另外,请确保您根据您的 roboguice 版本执行所有操作。在 roboguice2.0 中,您不再需要(不能)使用 RoboApplication 类。相反,您需要在 res/values 文件夹中创建一个 roboguice.xml 文件。查看升级说明:code.google.com/p/roboguice/wiki/UpgradingTo20

标签: android guice roboguice


【解决方案1】:

尝试在您的配置方法中添加一些绑定。

您也可以尝试像这样注入您的网格视图 @InjectView(R.id.gridview) GridView 网格视图;

希望对你有帮助。

问候。

【讨论】:

    【解决方案2】:

    这是因为我试图将我的 Activity 类注入到服务类中。

    所以我试图@Inject 一个“ClikClokActivity”实例而不是“Activity”。

    一旦我删除了这个注入尝试,一切正常。不确定这是否暴露了 RoboGuice 或 Guice 本身的其他问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-26
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-20
      • 2017-10-02
      • 2013-05-04
      相关资源
      最近更新 更多