1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Android]Retrofit + OkHttp + MoshiでGithub APIを使う

Posted at

AndroidでAPIを実装する時の手法をまとめました。

ざっくり説明

  • アーキテクチャはシンプルなAndroid MVVM
  • API実装にはRetrofit OkHttp Moshiを使用
  • 言語はKotlin
  • Github Search APIでリポジトリを検索

ソースコード

こちらに置きました。
https://github.com/usk-lab/AndroidGithubApiSample

実装画面

![Screenshot_20200908-144710.png]()

単純に検索文字を打ち込み、検索結果を表示します。

API部分の実装

  • GithubInterface:APIの定義
  • GithubRepository:API処理の実行
  • GithubRetrofitProvider:Github用にRetrofitを初期化しGithubRepositoryに提供する
  • SearchResponse:レスポンスの定義

APIの定義

GithubInterface.kt
interface GithubInterface {

    @GET("/search/repositories")
    fun getSearchRepositories(@Query("q") query: String) : Call<SearchResponse>

}

検索結果の処理

MyViewModel.kt
    //検索結果
    private var _searchResult: MutableLiveData<Result<SearchResponse>> = MutableLiveData()
    val searchResult: LiveData<Result<SearchResponse>> get() = _searchResult
    ....
    //リポジトリを検索
    fun searchRepository(query: String) {
        repository.searchRepository(query).also { response ->
            if (response.isSuccessful) {
                this._searchResult.postValue(Result.success(response.body()!!))
            } else {
                this._searchResult.postValue(Result.failure(Throwable(response.errorBody()!!.toString())))
            }
        }
    }

GithubRepositoryで返却される型はResponse<***>ですが、扱いやすくResult<***>に変換しています。
また、LiveDataを使い、情報更新を通知しています。

検索結果の表示

MainActivity.kt
    private lateinit var viewModel: MyViewModel
    private lateinit var adapter: ArrayAdapter<String>

    ....

        viewModel.searchResult.observeForever { result ->
            result.onSuccess { response ->
                this.adapter.clear()
                this.adapter.addAll(response.items.map { it.fullName })
                this.adapter.notifyDataSetChanged()
            }
            result.onFailure {
                Timber.e(it.toString())
            }
        }

検索結果をobserveForeverで受け取っています。
onSuccessの場合は、adapterを更新します。

参考

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?