Ничего не происходит, когда я настраиваю RoboGuice - PullRequest
1 голос
/ 05 ноября 2011

Я новичок в RoboGuice и пытаюсь настроить свою деятельность на использование DI. Однако ничего не происходит, когда я пытаюсь его использовать. Я получаю только пустое черное окно без содержимого и без регистрации в моем методе Activity.onCreate () после того, как я вызываю «super.onCreate (saveInstanceState);»

См. Эти 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 (saveInstanceState); что заставляет мое приложение не работать?

Спасибо

Обновление выше:

Я потратил довольно много времени на изучение этого, и теперь с помощью отладчика 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;
}

}

Как это могло быть, что он просто зависает при получении ключа с карты? Я не достаточно знаком с кодом, и это довольно запутанно для устранения неполадок. Любой совет приветствуется.

Ответы [ 2 ]

0 голосов
/ 09 декабря 2011

Это было вызвано тем, что я пытался внедрить свой класс Activity в класс обслуживания.

Поэтому я пытался @Inject добавить экземпляр "ClikClokActivity" вместо "Activity".

Как только я удалил эту попытку инъекции, все работало нормально.Не уверен, что это создает какую-то другую проблему с RoboGuice или с самим Guice.

0 голосов
/ 25 ноября 2011

Попробуйте добавить несколько привязок в ваш метод настройки.

Вы также можете попытаться внедрить свой вид сетки, как это @InjectView (R.id.gridview) GridView gridView;

Надеюсь, это поможет вам.

Привет.

...