「Android/kotlin/Retrofit2」の版間の差分
提供: 初心者エンジニアの簡易メモ
(ページの作成:「==Retrofitとは== APIやり取りのライブラリ ==サンプル== app/build.gradle <pre> dependencies{ implementation 'com.squareup.retrofit2:retrofit:2.9.0'...」) |
|||
| (同じ利用者による、間の4版が非表示) | |||
| 行6: | 行6: | ||
<pre> | <pre> | ||
dependencies{ | dependencies{ | ||
| − | implementation | + | def retrofitVer='2.9.0' |
| − | implementation | + | implementation"com.squareup.retrofit2:retrofit:$retrofitVer" |
| + | implementation"com.squareup.retrofit2:converter-gson:$retrofitVer" | ||
} | } | ||
</pre> | </pre> | ||
| 行13: | 行14: | ||
app/src/main/AndroidManifest.xml | app/src/main/AndroidManifest.xml | ||
<uses-permission android:name="android.permission.INTERNET"/> | <uses-permission android:name="android.permission.INTERNET"/> | ||
| + | |||
| + | GitHubClient.kt | ||
| + | <pre> | ||
| + | package com.example.retrofit2application | ||
| + | |||
| + | import retrofit2.Call | ||
| + | import retrofit2.http.GET | ||
| + | import retrofit2.http.Headers | ||
| + | import retrofit2.http.Path | ||
| + | |||
| + | interface GitHubClient { | ||
| + | |||
| + | @Headers( | ||
| + | "Accept: application/vnd.github.v3.full+json", | ||
| + | "User-Agent: Retrofit2Agent" | ||
| + | ) | ||
| + | @GET("/users/{username}") | ||
| + | fun getUser(@Path("username") username: String) : Call<User> | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | User.kt | ||
| + | <pre> | ||
| + | package com.example.retrofit2application | ||
| + | |||
| + | data class User( | ||
| + | val login: String, | ||
| + | val id: Int, | ||
| + | val avatar_url: String, | ||
| + | val gravatar_id: String, | ||
| + | val url: String, | ||
| + | val html_url: String, | ||
| + | val followers_url: String, | ||
| + | val following_url: String, | ||
| + | val gists_url: String, | ||
| + | val starred_url: String, | ||
| + | val subscriptions_url: String, | ||
| + | val organizations_url: String, | ||
| + | val repos_url: String, | ||
| + | val events_url: String, | ||
| + | val received_events_url: String, | ||
| + | val type: String, | ||
| + | val site_admin: Boolean, | ||
| + | val name: String, | ||
| + | val company: String?, | ||
| + | val blog: String?, | ||
| + | val location: String?, | ||
| + | val email: String?, | ||
| + | val hireable: Boolean?, | ||
| + | val bio: String?, | ||
| + | val public_repos: Int, | ||
| + | val public_gists: Int, | ||
| + | val followers: Int, | ||
| + | val following: Int, | ||
| + | val created_at: String, | ||
| + | val updated_at: String | ||
| + | ) | ||
| + | </pre> | ||
| + | |||
| + | <pre> | ||
| + | package com.example.retrofit2application | ||
| + | |||
| + | import androidx.appcompat.app.AppCompatActivity | ||
| + | import android.os.Bundle | ||
| + | import android.util.Log | ||
| + | import retrofit2.Call | ||
| + | import retrofit2.Callback | ||
| + | import retrofit2.Response | ||
| + | import retrofit2.Retrofit | ||
| + | import retrofit2.converter.gson.GsonConverterFactory | ||
| + | |||
| + | class MainActivity : AppCompatActivity() { | ||
| + | val tag = "MainActivity" | ||
| + | |||
| + | val retrofit = Retrofit.Builder() | ||
| + | .baseUrl("https://api.github.com") | ||
| + | .addConverterFactory(GsonConverterFactory.create()) | ||
| + | .build() | ||
| + | |||
| + | var service = retrofit.create(GitHubClient::class.java) | ||
| + | |||
| + | override fun onCreate(savedInstanceState: Bundle?) { | ||
| + | super.onCreate(savedInstanceState) | ||
| + | setContentView(R.layout.activity_main) | ||
| + | |||
| + | service.getUser("googleads") | ||
| + | .enqueue(object : Callback<User> { | ||
| + | override fun onResponse(call: Call<User>, response: Response<User>) { | ||
| + | if (response.isSuccessful) { | ||
| + | val user: User? = response.body() | ||
| + | if (user != null) { | ||
| + | Log.d(tag, "login=" + user.login) | ||
| + | Log.d(tag, "type=" + user.type) | ||
| + | Log.d(tag, "name=" + user.name) | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | override fun onFailure(call: Call<User>, t: Throwable) { | ||
| + | } | ||
| + | }) | ||
| + | } | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | 出力ログ | ||
| + | <pre> | ||
| + | login=googleads | ||
| + | type=Organization | ||
| + | name=Google Ads | ||
| + | </pre> | ||
==参考== | ==参考== | ||
| + | https://wiki.toridge.com/index.php?android-kotlin-retrofit2 | ||
| + | |||
https://qiita.com/175atsu/items/573193af65b91aa79df5 | https://qiita.com/175atsu/items/573193af65b91aa79df5 | ||
https://qiita.com/SYABU555/items/3b280a8e81d2cc897383 | https://qiita.com/SYABU555/items/3b280a8e81d2cc897383 | ||
2021年1月7日 (木) 18:22時点における最新版
Retrofitとは
APIやり取りのライブラリ
サンプル
app/build.gradle
dependencies{
def retrofitVer='2.9.0'
implementation"com.squareup.retrofit2:retrofit:$retrofitVer"
implementation"com.squareup.retrofit2:converter-gson:$retrofitVer"
}
app/src/main/AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
GitHubClient.kt
package com.example.retrofit2application
import retrofit2.Call
import retrofit2.http.GET
import retrofit2.http.Headers
import retrofit2.http.Path
interface GitHubClient {
@Headers(
"Accept: application/vnd.github.v3.full+json",
"User-Agent: Retrofit2Agent"
)
@GET("/users/{username}")
fun getUser(@Path("username") username: String) : Call<User>
}
User.kt
package com.example.retrofit2application
data class User(
val login: String,
val id: Int,
val avatar_url: String,
val gravatar_id: String,
val url: String,
val html_url: String,
val followers_url: String,
val following_url: String,
val gists_url: String,
val starred_url: String,
val subscriptions_url: String,
val organizations_url: String,
val repos_url: String,
val events_url: String,
val received_events_url: String,
val type: String,
val site_admin: Boolean,
val name: String,
val company: String?,
val blog: String?,
val location: String?,
val email: String?,
val hireable: Boolean?,
val bio: String?,
val public_repos: Int,
val public_gists: Int,
val followers: Int,
val following: Int,
val created_at: String,
val updated_at: String
)
package com.example.retrofit2application
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
class MainActivity : AppCompatActivity() {
val tag = "MainActivity"
val retrofit = Retrofit.Builder()
.baseUrl("https://api.github.com")
.addConverterFactory(GsonConverterFactory.create())
.build()
var service = retrofit.create(GitHubClient::class.java)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
service.getUser("googleads")
.enqueue(object : Callback<User> {
override fun onResponse(call: Call<User>, response: Response<User>) {
if (response.isSuccessful) {
val user: User? = response.body()
if (user != null) {
Log.d(tag, "login=" + user.login)
Log.d(tag, "type=" + user.type)
Log.d(tag, "name=" + user.name)
}
}
}
override fun onFailure(call: Call<User>, t: Throwable) {
}
})
}
}
出力ログ
login=googleads type=Organization name=Google Ads
参考
https://wiki.toridge.com/index.php?android-kotlin-retrofit2
