Getting started with Android & Java

Let’s start with Koin on a simple Android app with some Java

About

This tutorial lets you write an Android/Kotlin application and use Koin inject and retrieve your components.

Get the code

Checkout the project directly on Github or download the zip file

Gradle Setup

Add the Koin Android dependency like below:

// Add Jcenter to your repositories if needed
repositories {
    jcenter()    
}
dependencies {
    // Koin for Android
    compile 'org.koin:koin-android:1.0.1'
}

Our components (Java & Kotlin)

Let’s create a HelloRepository to provide some data:

interface HelloRepository {
    fun giveHello(): String
}

class HelloRepositoryImpl() : HelloRepository {
    override fun giveHello() = "Hello Koin"
}

Let’s create a Java presenter class, for consuming this data:

public class MyJavaPresenter {

    private HelloRepository repository;

    public MyJavaPresenter(HelloRepository repository) {
        this.repository = repository;
    }

    public String sayHello(){
        String hello = repository.giveHello();

        return hello+" from "+this;
    }

}

Writing the Koin module

Use the module function to declare a module. Let’s declare our first component:

val appModule = module {

    // single instance of HelloRepository
    single<HelloRepository> { HelloRepositoryImpl() }

    // Simple Presenter Factory
    factory { MyJavaPresenter(get()) }
}

Note: we declare our MySimplePresenter class as factory to have a create a new instance each time our Activity will need one.

Start Koin

Now that we have a module, let’s start it with Koin. Open your application class, or make one (don’t forget to declare it in your manifest.xml). Just call the startKoin() function:

class MyApplication : Application(){
    override fun onCreate() {
        super.onCreate()
        // Start Koin
        startKoin(this, listOf(appModule))
    }
}

Injecting dependencies into Java Activity

The MyJavaPresenter component will be created with HelloRepository instance. To get it into our Activity, let’s inject it with the static inject() function:

// import inject
import static org.koin.java.standalone.KoinJavaComponent.inject;

public class JavaActivity extends AppCompatActivity {

    private Lazy<MySimplePresenter> presenter = inject(MySimplePresenter.class);
    private Lazy<MyJavaPresenter> javaPresenter = inject(MyJavaPresenter.class);

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_simple);

        //...
    }
}

What’s Next?

You have finished this starting tutorial. Below are some topics for further reading:

Also other Android getting started project: