Okhttp Nedir ve Okhttp'nin Android Projede Kullanımı

OkHttp, gelişmiş HTTP istekleri oluşturmak ve sunucudan gelen yanıtları işlemek için kullanılan bir Java kütüphanesidir. Android uygulamalarında kullanılan en popüler HTTP kütüphanelerinden biridir.

OkHttp, birçok özellik ve avantaj sunar. Örneğin:

  • HTTP/2 desteği
  • HTTP/1.1 protokolünün özelliklerinin geliştirilmiş desteği
  • Asenkron istekler için callback fonksiyonları
  • İstekler ve yanıtlar için önbellekleme
  • Güvenliği artırmak için SSL desteği
  • Basit, anlaşılır ve güçlü bir API

OkHttp, bir OkHttpClient nesnesi oluşturarak kullanılır. Bu nesne, HTTP istekleri yapmak ve sunucudan yanıtları almak için kullanılır.


val client = OkHttpClient()

val request = Request.Builder()
    .url("https://www.example.com")
    .build()

val response = client.newCall(request).execute()
val responseBody = response.body?.string()

Log.d("OkHttp", responseBody)

Bu örnekte, OkHttpClient sınıfının örnek bir nesnesi oluşturulur ve Request sınıfı kullanarak bir GET isteği yapılır. Sonra, newCall() fonksiyonu ile istek gönderilir ve execute() fonksiyonu ile sunucudan gelen yanıt alınır. Yanıtın içeriği response.body?.string() fonksiyonu ile alınır ve Log.d() fonksiyonu kullanarak konsola yazdırılır.

Örnek bir uygulama geliştirerek OkHttp kütüphanesi nasıl kullanılır birlikte bakalım. Bu örnekte, bir RESTful API'ye GET isteği gönderip, aldığımız verileri bir liste olarak göstereceğiz.

İlk olarak, OkHttp kütüphanesini kullanmak için build.gradle dosyasına aşağıdaki kodu ekliyoruz:



dependencies {
    implementation 'com.squareup.okhttp3:okhttp:4.9.1'
}

Daha sonra, MainActivity sınıfını aşağıdaki gibi düzenliyoruz:

class MainActivity : AppCompatActivity() {

    private lateinit var recyclerView: RecyclerView
    private lateinit var progressBar: ProgressBar

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        recyclerView = findViewById(R.id.recyclerView)
        progressBar = findViewById(R.id.progressBar)

        // API'den verileri almak için bir fonksiyon çağırıyoruz
        fetchData()
    }

    private fun fetchData() {
        // OkHttp client oluşturuyoruz
        val client = OkHttpClient()

        // API endpoint adresi
        val url = "https://jsonplaceholder.typicode.com/posts"

        // API'den GET isteği oluşturuyoruz
        val request = Request.Builder()
            .url(url)
            .build()

        // İstek asenkron olarak gönderiliyor
        client.newCall(request).enqueue(object : Callback {
            override fun onFailure(call: Call, e: IOException) {
                // İstek başarısız olursa hata mesajı yazdırıyoruz
                runOnUiThread {
                    Toast.makeText(this@MainActivity, "Er ${e.message}", Toast.LENGTH_SHORT).show()
                }
            }

            override fun onResponse(call: Call, response: Response) {
                // İstek başarılı olursa verileri işliyoruz
                val json = response.body?.string()
                val posts = Gson().fromJson<List<Post>>(json, object : TypeToken<List<Post>>() {}.type)

                // Verileri RecyclerView'da gösteriyoruz
                runOnUiThread {
                    recyclerView.adapter = PostAdapter(posts)
                    recyclerView.layoutManager = LinearLayoutManager(this@MainActivity)
                    progressBar.visibility = View.GONE
                }
            }
        })
    }
}

Bu örnekte, fetchData() fonksiyonu API endpoint'ine GET isteği gönderiyor ve aldığı verileri bir RecyclerView ile liste şeklinde gösteriyor.
İlk olarak, OkHttpClient sınıfının bir nesnesi oluşturuluyor ve Request sınıfı kullanarak bir GET isteği oluşturuluyor. client.newCall(request).enqueue() fonksiyonu ile istek asenkron olarak gönderiliyor ve istek başarılı veya başarısız olduğunda geri çağrı fonksiyonları çağrılıyor. Başarısız bir istek durumunda, hata mesajı gösteriliyor. Başarılı bir istek durumunda, verileri işlemek için response.body?.string() fonksiyonu kullanılıyor ve Gson kütüphanesi ile JSON verileri bir List<Post> listesine dönüştürülüyor.

Yorum Gönder

0 Yorumlar