Bladeren bron

Added sample api call using retrofit

sirekanyan 8 jaren geleden
bovenliggende
commit
63c1d7389c

+ 2 - 0
app/build.gradle

@@ -19,4 +19,6 @@ dependencies {
     compile 'com.android.support:design:26.0.0-alpha1'
     compile 'com.android.support:support-vector-drawable:26.0.0-alpha1'
     compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
+    compile 'com.squareup.retrofit2:retrofit:2.3.0'
+    compile 'com.squareup.retrofit2:converter-gson:2.3.0'
 }

+ 3 - 0
app/src/main/AndroidManifest.xml

@@ -4,7 +4,10 @@
     xmlns:tools="http://schemas.android.com/tools"
     package="me.vadik.knigopis">
 
+    <uses-permission android:name="android.permission.INTERNET"/>
+
     <application
+        android:name=".App"
         android:allowBackup="false"
         android:icon="@drawable/ic_letter_k"
         android:label="@string/app_name"

+ 15 - 0
app/src/main/java/me/vadik/knigopis/App.kt

@@ -0,0 +1,15 @@
+package me.vadik.knigopis
+
+import android.app.Application
+import retrofit2.Retrofit
+import retrofit2.converter.gson.GsonConverterFactory
+
+class App : Application() {
+
+  val retrofit by lazy {
+    Retrofit.Builder()
+        .baseUrl("http://api.knigopis.com")
+        .addConverterFactory(GsonConverterFactory.create())
+        .build()
+  }
+}

+ 9 - 0
app/src/main/java/me/vadik/knigopis/Endpoint.kt

@@ -0,0 +1,9 @@
+package me.vadik.knigopis
+
+import retrofit2.Call
+import retrofit2.http.GET
+
+interface Endpoint {
+  @GET("users/latest")
+  fun latestUsers(): Call<Map<String, User>>
+}

+ 16 - 0
app/src/main/java/me/vadik/knigopis/MainActivity.kt

@@ -4,9 +4,14 @@ import android.os.Bundle
 import android.support.design.widget.BottomNavigationView
 import android.support.v7.app.AppCompatActivity
 import android.view.MenuItem
+import retrofit2.Call
+import retrofit2.Callback
+import retrofit2.Response
 
 class MainActivity : AppCompatActivity() {
 
+  private val api by lazy { app().retrofit.create(Endpoint::class.java) }
+
   private val onNavigationItemSelectedListener = { item: MenuItem ->
     supportActionBar!!.setTitle(when (item.itemId) {
       R.id.navigation_home -> R.string.title_home
@@ -22,5 +27,16 @@ class MainActivity : AppCompatActivity() {
     setContentView(R.layout.activity_main)
     val navigation = findViewById(R.id.navigation) as BottomNavigationView
     navigation.setOnNavigationItemSelectedListener(onNavigationItemSelectedListener)
+    api.latestUsers().enqueue(object : Callback<Map<String, User>> {
+      override fun onResponse(call: Call<Map<String, User>>?, response: Response<Map<String, User>>?) {
+        response?.body()?.forEach { (_, user) ->
+          logw(user.nickname)
+        }
+      }
+
+      override fun onFailure(call: Call<Map<String, User>>?, t: Throwable?) {
+        log("cannot load users", t)
+      }
+    })
   }
 }

+ 8 - 0
app/src/main/java/me/vadik/knigopis/User.kt

@@ -0,0 +1,8 @@
+package me.vadik.knigopis
+
+class User(
+    val id: String,
+    val nickname: String,
+    val booksCount: Int,
+    val updatedAt: String
+)

+ 12 - 0
app/src/main/java/me/vadik/knigopis/extensions.kt

@@ -0,0 +1,12 @@
+package me.vadik.knigopis
+
+import android.app.Activity
+import android.util.Log
+
+private const val TAG = "Knigopis"
+
+fun Activity.app() = application as App
+
+fun Activity.logw(message: String) = Log.w(TAG, message)
+
+fun Activity.log(message: String, throwable: Throwable?) = Log.e(TAG, message, throwable)