2013-02-12 4 views
0

Guice가 삽입 한 공장을 사용하는 데 문제가 있습니다.안드로이드에 Guice가 주입 한 공장을 사용하는 방법?

나는이 좋은 기사 http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/assistedinject/FactoryModuleBuilder.html을 읽었지만 여전히 뭔가를 이해하지 못합니다. 나는. 모듈이 사용 된 적이없는 이유는 무엇입니까? 처럼 Guice.createInjector() 메서드입니다.

나는이 간단한 응용 프로그램을 시도했는데 Guidance가 내가 필요로하는 Factory를 해결할 수 없기 때문에 NullPointerException이 있습니다.

public interface FooInterface 
{ 
    String getString(); 
} 

public class Foo implements FooInterface { 
    String bar; 

    @Inject 
    Foo(@Assisted String bar) 
    { 
     Log.i("main", "Foo constructor"); 
     this.bar = bar; 
    } 

    public String getString(){ 
     Log.i("main", "getString"); 
     return this.bar; 
    } 
} 

public interface FooFactory 
{ 
    FooInterface create(String bar); 
} 

다음은 구성 모듈

public class ConfigurationModule extends AbstractModule 
{ 
    @Override 
    protected void configure() 
    { 
     Log.i("main", "Configuration module"); 
     install(new FactoryModuleBuilder().implement(FooInterface.class, Foo.class).build(FooFactory.class)); 
    } 
} 

그리고 내 활동 내가 로그에서, 생성자가 호출되지 않습니다 볼 수 있듯이

public class MyActivity extends Activity implements View.OnClickListener 
{ 
    @Inject private FooFactory fooFactory; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Log.i("main", "onCreate"); 

     Button btn = (Button) findViewById(R.id.btn); 
     btn.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View view) 
    { 
     Log.i("main", "onClick"); 
     FooInterface foo = this.fooFactory.create("foo name"); 
     String str = foo.getString(); 
     Toast.makeText(getApplicationContext(), "String is: "+ str, Toast.LENGTH_SHORT); 
    } 
} 

입니다. ConfigurationModule과 동일합니다. 이 모듈을 사용하는 곳을 볼 수 없습니다. 어떤 아이디어? 어쩌면 내가 뭔가를 놓친거야?

+0

여기서 ConfigurationModule을 설치하고 있습니까? MyActivity 활동은 어떻게 작성하고 있습니까? (게시 한 코드가 올바르게 보이지만 ConfigurationModule을 기반으로 인젝터를 만들고 해당 인스턴스에서 MyActivity의 인스턴스를 가져와야하는지 확인해야합니다. –

+0

그게 어떤 예제에서 찾지 못했던 문제입니다. 이 모듈을 사용해야합니까? 그래서 기본적으로 나는 그것을 전혀 설치하지 않으며 그것을하는 방법을 모른다. 활동을 생성하지 않습니다. Android는 않습니다. 그것은 응용 프로그램과 함께 시작되는 유일한 활동입니다. –

+1

Android에서 vanilla Guice를 사용할 수 있다고 생각하지 않습니다. 다음을 살펴 보셨습니까? https://github.com/roboguice/roboguice/wiki? – condit

답변

1

필자는 순수 Guice를 Android 애플리케이션에 사용하는 데 장점이 없다고 생각하기 시작했습니다. Roboguice이 적합합니다.

0

ActionBarSherlock도 사용해야하는 경우 을 확인하십시오.

+0

예, 알고 있습니다. –

관련 문제