Как реализовать Retrofit и GSON? - PullRequest
0 голосов
/ 05 июня 2018

Я начинающий разработчик Android.Я пытаюсь создать приложение базы данных фильмов, используя tmdb.Для этого я использую язык Kotlin и решил использовать Retrofit и GSON для моего анализа JSON и HTTP-вызовов.Тем не менее, я не делал этого раньше.Я прошел несколько уроков, но одно отличается от другого, и мой ADD не очень помогает, когда дело доходит до выработки концепций.

Пока это мой код.Все, что он делает, это берет изображение заполнителя и отображает его в 3-х колоночном макете сетки повторного просмотра 300x (случайное число, потому что у меня еще нет размера списка):

MainActivity.kt

class MainActivity() : AppCompatActivity() {

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

        val recyclerView = findViewById<RecyclerView>(R.id.recycler_view);
        recyclerView.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
        recyclerView.layoutManager = GridLayoutManager(this, 3);
        recyclerView.adapter = PosterAdapter()
    }
}

PosterAdapter.kt

class PosterAdapter() : RecyclerView.Adapter<PosterHolder>(){

    override fun getItemCount(): Int { return 300}

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PosterHolder{
        val layoutInflater = LayoutInflater.from(parent.context)
        val listItem = layoutInflater.inflate(R.layout.list_item, parent, false)
        return PosterHolder(listItem)
    }

    override fun onBindViewHolder(holder: PosterHolder, position: Int) {
        holder.view.movie_poster?.setImageResource(R.mipmap.beauty_and_the_beast_ver3)
        holder.view.movie_poster?.scaleType = ImageView.ScaleType.FIT_XY
    }
}

class PosterHolder(val view: View) : RecyclerView.ViewHolder(view), View.OnClickListener {
    var imageView: ImageView? = null

    fun PosterHolder(view: View){ this.imageView = view.findViewById<View>(R.id.movie_poster) as ImageView }

    override fun onClick(p0: View?) {}
}

Я не хочу, чтобы кто-то готовил для меня код.Я не могу учиться таким образом.Буду признателен за простое пошаговое объяснение того, как реализовать обе библиотеки в моем приложении.

1 Ответ

0 голосов
/ 07 июня 2018

Вот простой фрагмент кода о том, как вы можете настроить Retrofit с Kotlin.Во-первых, интерфейс API, где вы будете определять свои сетевые вызовы.Например:

interface ServerAPI {

    @FormUrlEncoded
    @POST("/api/v1/login")
    fun login(@Header("Authorization") authorization: String): Call<LoginResponse>
}

Затем создайте экземпляр Retrofit.Лично я предпочитаю сделать объект kotlin и инициализировать его by lazy.Также обратите внимание на GsonConverterFactory

object RetrofitServer {

    val client: ServerAPI by lazy {

        val client = OkHttpClient.Builder()
                .build()
        val retrofit = Retrofit.Builder()
                .baseUrl("http://127.0.0.1/")
                // For Gson
                .addConverterFactory(GsonConverterFactory.create())
                .client(client)
                .build()
        retrofit.create(ServerAPI::class.java)
    }
}

Тогда это все.Чтобы позвонить, просто

RetrofitServer.client.login("Auth header").enqueue(object: Callback<BalanceResponse> {
    override fun onFailure(call: Call<BalanceResponse>?, t: Throwable?) {

    }

    override fun onResponse(call: Call<BalanceResponse>?, t: Response<BalanceResponse>?) {

    }
}
)
...