0% menganggap dokumen ini bermanfaat (0 suara)
13 tayangan11 halaman

Froxlor

Dokumen tersebut membahas tentang pembuatan aplikasi Android yang mengkonsumsi data dari dua tabel melalui REST API menggunakan library Retrofit. Aplikasi tersebut dapat menampilkan data dari dua tabel yaitu tabel event dan tabel kategori melalui interface dan adapter yang dibuat menggunakan Retrofit.

Diunggah oleh

Nuh Ansori
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
13 tayangan11 halaman

Froxlor

Dokumen tersebut membahas tentang pembuatan aplikasi Android yang mengkonsumsi data dari dua tabel melalui REST API menggunakan library Retrofit. Aplikasi tersebut dapat menampilkan data dari dua tabel yaitu tabel event dan tabel kategori melalui interface dan adapter yang dibuat menggunakan Retrofit.

Diunggah oleh

Nuh Ansori
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 11

Program Studi:

Teknik komputer Penulis:


dan jaringan Muhammad idris assyafei Judul:
Rest Api Android Studio
Mata Kuliah: Kelas:TK21AB Dua Table
Pemograman Tanggal: 14 Oktober
Mobile
A. Tujuan
1. Mahasiswa memahami cara kerja HTTP Restful
2. Mahasiswa memahami jenis-jenis library http pada Android
3. Mahasiswa memahami dan dapat menggunakan library Retrofit
4. Mahasiswa dapat menggunakan ROBO Pojo Generator
5. Mahasiswa dapat memahami dan membuat projek Android yang
mengkonsumsi data JSONJSON
B. Alat dan Bahan
1. Android Studio
2. Plugins Robogson adapter
3. Retrofit2
4. Xampp
5. OkHttp
C.Pemahaman
REST (Representational State Transfer) adalah suatu arsitektur metode komunikasi
yang menggunakan protokol HTTP untuk pertukaran data, sedangkan Restful API
adalah API yang menggunakan sistem REST untuk pertukaran data dari 2 sistem
yang berbeda. Pertukaran APIn, seperti internet.
D.Instalasi

1.Buka Aplikasi Android Studi Lalu buat project baru

2.setelah selesai installkan plugin pada projeknya dengan nama RoboPojo


3.Selesai install selanjutnya buat package dengan nama model seperti berikut ini:

4.selesai lalu masuk pada model dengan klik kanan-new-convertGson paling bawah lalu klik

Dan tambahkan script yang ada pada json dan masukan ke dalam gson dengan format

-kotlin -gson lalu generate buat dua file gson


5.setelah selesai maka akan tampil file dan beserta isinya secara otomatis
6.selesai selanjut buat method get nya dengan membuat file Bernama ApiServices dengan tipe
Interfaces

7.lalu is ikan kode berikut ini


import retrofit2.http.GET
interface ApiServices {
@GET("events")
fun getPost():
retrofit2.Call<com.example.latihan2_nov.model.Response>
@GET("kategoris")
fun getkategoris():
retrofit2.Call<com.example.latihan2_nov.model.Response2>
}
8.selanjutnya adalah membuat file class dengan nama NetworkConfig lalu dengan tipe class sama
seperti di atas lalu isikan kode berikut ini :
package com.example.api_idris
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.util.concurrent.TimeUnit

class NetworkConfig {
val BASE_URL:String = "http://192.168.0.183:8080/api/public/api/”

private fun setOkHttp(): OkHttpClient {


val interceptor = HttpLoggingInterceptor()
interceptor.level = HttpLoggingInterceptor.Level.BODY

return OkHttpClient.Builder()
.addInterceptor(interceptor)
.callTimeout(15L, TimeUnit.SECONDS)
.build()
}

private fun getRetrofitInstance(): Retrofit {


return Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(setOkHttp())
.build()
}

fun getService(): ApiServices{


return getRetrofitInstance().create(ApiServices::class.java)
}
}

9.Selesai maka Langkah selanjutnya adalah membuat Layout dengan nama list_post_adapter.xml
dan list_kategori_adapter di folder res dengan kill folder ress dan klik kanan pada layout-new-
reourcelayout lalu is ikan kode berikut ini pada xmlnya:

a.List_post_adapter
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="120dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:cardElevation="10dp"
app:cardCornerRadius="5dp"
android:layout_margin="10dp"
android:id="@+id/cv_main"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_margin="7dp"
android:gravity="center" >

<ImageView
android:layout_width="64dp"
android:layout_height="match_parent"
android:layout_marginEnd="10dp"
android:layout_weight="0.1"
android:src="@drawable/baseline_person_24" />

<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical"
android:gravity="center"
>

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/id"
android:text="ID User" />

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/image"
android:text="Nama User" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/judul"
android:text="Username User" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/datepost"
android:text="Email User" />
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>

10.selanjutnya kita buat file class dengan tipe data class berikan nama
PostAdapter.kt dan KategoriAdapter.kt lalu isi kode nya di bawah ini

a.PostAdapter

package com.example.api_idris

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.example.api_idris.databinding.ListPostAdapterBinding
import com.example.api_idris.model.DataItem

class PostsAdapter (
private val listPosts : List<DataItem>?,
private val onListItemClick : (DataItem?)-> Unit
) : RecyclerView.Adapter<PostsAdapter.ViewHolder>(){

inner class ViewHolder(val ListPostsAdapterBinding :


ListPostAdapterBinding) :
RecyclerView.ViewHolder(ListPostsAdapterBinding.root) {
fun onBindItem(dataItem: DataItem?){
ListPostsAdapterBinding.judul.text = dataItem?.title
ListPostsAdapterBinding.datepost.text = dataItem?.content
ListPostsAdapterBinding.root.setOnClickListener{
onListItemClick(dataItem)
}
}
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int):


ViewHolder {
val binding =

ListPostAdapterBinding.inflate(LayoutInflater.from(parent.context),parent,fals
e)
return ViewHolder(binding)
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {


holder.onBindItem(listPosts?.get(position))
}

override fun getItemCount(): Int {


return listPosts?.size ?: 0
}
}

b.List_kategori_adapter

import android.annotation.SuppressLint
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.recyclerview.widget.DefaultItemAnimator
import androidx.recyclerview.widget.LinearLayoutManager
import com.example.latihan2_nov.Adapter.KategoriAdapter
import com.example.latihan2_nov.config.NetworkConfig
import com.example.latihan2_nov.databinding.KategorisMainBinding
import com.example.latihan2_nov.model.DataItem2
import com.example.latihan2_nov.model.Response2
import retrofit2.Call
import retrofit2.Callback

class KategoriActivity : AppCompatActivity() {


private lateinit var binding: KategorisMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = KategorisMainBinding.inflate(layoutInflater)
setContentView(binding.root)
getkategoris()
}

private fun getkategoris(){


NetworkConfig().getService()
.getkategoris()
.enqueue(object : Callback<Response2>{
override fun onResponse(
call: Call<Response2>,
response: retrofit2.Response<Response2>
) {
binding.progressIndicator.visibility = View.GONE
if (response.isSuccessful){
val receivedDatas = response.body()?.data
setToAdapter(receivedDatas as List<DataItem2>?)
}
}

@SuppressLint("SuspiciousIndentation")
override fun onFailure(call: Call<Response2>, t: Throwable) {
[email protected]
= View.GONE
Log.d("Retrofit failed ","onFailure : ${t.stackTrace}")
}
})
}

private fun setToAdapter(receivedDatas: List<DataItem2>?) {


this.binding.newsList.adapter = null
val adapter = KategoriAdapter(receivedDatas) {
val detailNewsIntent = Intent(this@KategoriActivity,
DetailKategoriActivity::class.java)
detailNewsIntent.putExtra("idNews",it?.id)
startActivity(detailNewsIntent)
}
val lm = LinearLayoutManager(this)
this.binding.newsList.layoutManager = lm
this.binding.newsList.itemAnimator = DefaultItemAnimator()
this.binding.newsList.adapter = adapter
}
}

<?xml version="1.0" encoding="utf-8"?>


<androidx.cardview.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="120dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:cardElevation="10dp"
app:cardCornerRadius="5dp"
android:layout_margin="10dp"
android:id="@+id/cv_main"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_margin="7dp"
android:gravity="center" >

<ImageView
android:layout_width="64dp"
android:layout_height="match_parent"
android:layout_marginEnd="10dp"
android:layout_weight="0.1"
android:src="@drawable/baseline_person_24" />

<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical"
android:gravity="center"
>

<TextView
android:id="@+id/id"
android:layout_width="147dp"
android:layout_height="wrap_content"
android:text=" Kategori" />

<TextView
android:id="@+id/image1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Jenis" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/judul1"
android:text="Username User" />
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>

11. setelah selesai lalu kita berikan aksi di halaman mainactivtynya dan isi dengan kode berikut ini :
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import com.example.latihan2_nov.R

class MainActivity : AppCompatActivity() {


override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val buttonNext = findViewById<Button>(R.id.btn_1)
val buttonNext1 = findViewById<Button>(R.id.btn_2)
buttonNext.setOnClickListener {
val intent = Intent(this, PostsActivity::class.java) // Ubah
"intent" menjadi "IntentActivity"
startActivity(intent)
}
buttonNext1.setOnClickListener {
val intent = Intent(this, KategoriActivity::class.java) // Ubah
"intent" menjadi "IntentActivity"
startActivity(intent)
}
}
}

12.selesai selanjutnya adalah mengisi layout_mainactivty dengan berikut ini :


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity.MainActivity">

<Button
android:id="@+id/btn_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="events"
android:layout_gravity="center"
android:layout_marginBottom="16dp"
/>

<Button
android:id="@+id/btn_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Kategoris"
android:layout_gravity="center"
android:layout_marginTop="16dp"
/>
</LinearLayout>

13.Selesai dan run aplikasinya

Hasilnya:

1.Hasil Pada Web

a.List Events

b.List kategori
2.Hasil Pada Emulator

F.Error Yang Saya Alami

N ERROR SOLUSI
O

1. Tidak menemukan class DataMainactivity Membuat File


DataMAinactivty.kt besert
xmlnya

2. Error pada beberapa kode Terdapat typo yang di


ketikan

Anda mungkin juga menyukai