Aplikasi Android Chock Norris Facts di Kotlin

Aplikasi Android Chock Norris Facts di Kotlin


Fakta tentang Chuck Norris adalah fenomena internet dengan “fakta” ​​lucu tentang master seni bela diri dan aktor Chuck Norris. "Fakta" adalah lelucon tentang stamina Norris, kejantanannya, dan status lelaki alfa.


Dalam tutorial ini, kita akan membuat aplikasi Android kita sendiri dengan fakta tentang Chuck Norris menggunakan Kotlin. Sebagai IDE kita akan menggunakan Android Studio. Dalam contoh ini, Anda bisa mempelajari cara melakukan permintaan jaringan di Kotlin dan cara menggunakan pustaka OkHttp 3.


Fakta-fakta akan diperoleh dari database fakta tentang Chuck Norris, yang menawarkan API sederhana untuk mendapatkan fakta-fakta acak.


Tambahkan ketergantungan untuk OkHttp


Untuk melakukan panggilan jaringan, kami akan menggunakan pustaka OkHttp. Jadi, kita perlu menambahkan dependensi OkHttp 3.10 ke file build.gradle kami:


 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' android { compileSdkVersion 27 defaultConfig { applicationId "com.ssaurel.chucknorrisfacts" minSdkVersion 15 targetSdkVersion 27 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support.constraint:constraint-layout:1.1.2' implementation 'com.squareup.okhttp3:okhttp:3.10.0' } 

Kustomisasi Android Manifest


Juga, untuk melakukan panggilan jaringan, kita perlu menambahkan izin INTERNET ke manifes aplikasi kita:


 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ssaurel.chucknorrisfacts"> <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

Pembuatan Antarmuka Pengguna


Langkah selanjutnya adalah membuat antarmuka pengguna aplikasi kita. Kami akan menggunakan ConstraintLayout sebagai komponen dasar tata letak.


Di bagian atas antarmuka pengguna kami adalah ImageView dengan wajah Chuck Norris:


Chuck Norris


Kemudian kami menambahkan TextView di mana kami akan menampilkan fakta Chuck Norris. Untuk TextView mendefinisikan ketergantungan, yang terletak tepat di bawah ImageView . Setelah itu, tambahkan tombol yang memungkinkan pengguna mengunduh fakta baru, memintanya dari basis data. Terakhir, tambahkan ProgressBar , yang akan dipusatkan di layar.


Akibatnya, kami mendapatkan tata letak berikut untuk antarmuka pengguna kami:


 <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF" tools:context=".MainActivity"> <ImageView android:id="@+id/imageView" android:layout_width="200dp" android:layout_height="200dp" android:layout_marginEnd="8dp" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:layout_marginStart="8dp" android:layout_marginTop="30dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/chucknorris" /> <TextView android:id="@+id/factTv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="8dp" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:layout_marginStart="8dp" android:layout_marginTop="30dp" android:text="Chuck Norris Fact" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/imageView" android:textSize="20sp" android:paddingLeft="30dp" android:paddingRight="30dp" android:gravity="center_horizontal"/> <Button android:id="@+id/nextBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="30dp" android:layout_marginEnd="8dp" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:layout_marginStart="8dp" android:text="Next" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> <ProgressBar android:id="@+id/progressBar" style="?android:attr/progressBarStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="8dp" android:layout_marginEnd="8dp" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:layout_marginStart="8dp" android:layout_marginTop="8dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" android:visibility="gone"/> </android.support.constraint.ConstraintLayout> 

Pengujian API


Sebelum menulis kode di MainActivity kami menguji respon yang dikembalikan oleh API database. Kami akan menghubungi alamat berikut: https://api.icndb.com/jokes/random .


Layanan web ini secara acak mengembalikan fakta baru tentang Chuck Norris pada setiap panggilan. Dengan memasukkan URL ke browser web, Anda akan mendapatkan hasil berikut:


Hasil panggilan API


Jadi, kita perlu mengurai respons JSON untuk sampai ke properti lelucon , yang berisi fakta yang kita butuhkan.


Menulis Kode Kotlin untuk MainActivity


Sekarang saatnya menulis kode untuk MainActivity . Kami mendefinisikan variabel tempat kami menyimpan URL titik akhir API yang akan kami panggil. Kemudian kita instantiate objek OkHttpClient .


Di metode onCreate MainActivity , kita hanya perlu mengatur OnClickListener ke tombol yang memungkinkan pengguna mengunduh fakta baru tentang Chuck Norris.


API loadRandomFact dalam metode loadRandomFact khusus. Kami menampilkan ProgressBar sebelum mengakses jaringan. Lalu kami membuat objek Request dengan URL titik akhir di parameter.


Setelah itu, kami memanggil metode OkHttpClient di OkHttpClient , melewati Request sebagai parameter untuk itu. Untuk memproses respons, kami memanggil metode enqueue dengan instance Callback di parameter.


Dalam metode onResponse kami mendapatkan respons dan kemudian membuat JSONObject . Langkah terakhir adalah untuk mendapatkan properti lelucon dari objek nilai . Setelah itu, kita dapat menampilkan fakta Chuck Norrim di TextView dengan merangkum semua yang ada di blok runOnUiThread untuk memastikan bahwa antarmuka pengguna diperbarui di utas antarmuka pengguna.


Hasilnya, kami mendapatkan kode berikut untuk MainActivity aplikasi Android kami:


 package com.ssaurel.chucknorrisfacts import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.text.Html import android.view.View import kotlinx.android.synthetic.main.activity_main.* import okhttp3.* import org.json.JSONObject import java.io.IOException class MainActivity : AppCompatActivity() { val URL = "https://api.icndb.com/jokes/random" var okHttpClient: OkHttpClient = OkHttpClient() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) nextBtn.setOnClickListener { loadRandomFact() } } private fun loadRandomFact() { runOnUiThread { progressBar.visibility = View.VISIBLE } val request: Request = Request.Builder().url(URL).build() okHttpClient.newCall(request).enqueue(object: Callback { override fun onFailure(call: Call?, e: IOException?) { } override fun onResponse(call: Call?, response: Response?) { val json = response?.body()?.string() val txt = (JSONObject(json).getJSONObject("value").get("joke")).toString() runOnUiThread { progressBar.visibility = View.GONE factTv.text = Html.fromHtml(txt) } } }) } } 

Luncurkan aplikasi


Bagian terbaik dari pelajaran. Ketika Anda memulai aplikasi, Anda akan mendapatkan hasil berikut:


Aplikasi siap

Source: https://habr.com/ru/post/id450488/


All Articles