Я хотел бы вызывать API-данные, используя okhttp, но в результате "на нулевую ссылку на объект" - PullRequest
0 голосов
/ 13 ноября 2018

Я хотел бы получить данные команды Манчестер Сити из:

API Link с использованием OKHttp. Я хотел бы отобразить такую ​​информацию, как название клуба, информационный логотип и т. Д. Сначала я попытался отобразить значок.

вот мой файл "Testgambar.kt"

package com.eldarcreative.portalbola



import android.support.v7.app.AppCompatActivity

import android.os.Bundle
import android.support.v7.widget.LinearLayoutManager
import com.google.gson.GsonBuilder
import kotlinx.android.synthetic.main.activity_tes_gambar.*
import okhttp3.*
import java.io.IOException

class TesGambar : AppCompatActivity() {

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

        detailrv.layoutManager= LinearLayoutManager(this)


        fetchJSONHome()


    }

    fun fetchJSONHome(){
        val urlhome = "https://www.thesportsdb.com/api/v1/json/1/lookupteam.php?id=133613"

        val request = Request.Builder().url(urlhome).build()

        val client = OkHttpClient()

        client.newCall(request).enqueue(object: Callback {
            override fun onResponse(call: Call, response: Response) {
                val body = response?.body()?.string()
                val gson = GsonBuilder().create()

                val DataTeam= gson.fromJson(body, Datatim::class.java)

                runOnUiThread {
                    detailrv.adapter = TeamAdapterZ(DataTeam)
                }
            }

            override fun onFailure(call: Call, e: IOException) {

            }

        })
    }

    }

    class Datatim(val loglog : List<DetailTim>)

Datatim.kt

data class DetailTim (
val idTeam:String?,
val strTeamLogo:String?,
val strTeamBadge:String?

)

TeamAdapterZ.kt

import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.squareup.picasso.Picasso
import kotlinx.android.synthetic.main.activity_detail.view.*

public  var logologo:String? = null

class TeamAdapterZ (val datatim :Datatim)  : RecyclerView.Adapter<TeamAdapterZ.TeamViewHolder>(){
    override fun onBindViewHolder(holder:TeamViewHolder, position: Int) {
        val timdata=datatim.loglog.get(position)
        holder.view.cadangantandang.text=timdata.idTeam

    }

    override fun getItemCount(): Int {

            return datatim.loglog.count() ;

    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TeamAdapterZ.TeamViewHolder {
        val layoutInflater = LayoutInflater.from(parent.context)
        val cellforrow = layoutInflater.inflate(R.layout.activity_detail, parent, false)
        return TeamAdapterZ.TeamViewHolder(cellforrow)
    }

    class TeamViewHolder (val view: View):RecyclerView.ViewHolder(view){

    }
    }

Мой первый тест - выяснить, извлекаются ли данные или нет, но в logcat * возвращается нулевое значение

java.lang.NullPointerException: попытка вызвать метод интерфейса int java.util.Collection.size () для ссылки на пустой объект at com.eldarcreative.portalbola.TeamAdapterZ.getItemCount (TeamAdapterZ.kt: 25)

Кто-нибудь знал, как это исправить?.

...