我是新手Android开发人员。我正在尝试使用tmdb构建一个电影数据库应用程序。为此,我使用Kotlin语言并选择使用Retrofit和GSON进行JSON解析和HTTP调用。但是,我之前没有这样做过。我经历了多个教程,但一个与另一个不同,我的A.D.D.在推导概念方面并没有真正帮助。
现在,这是我的代码。它只需要占位符图像并将其显示在3列的recyclerview网格布局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?) {}
}
我不希望有人为我做代码。我不能那样学习。我将非常感谢如何在我的应用程序中实现这两个库的简单分步说明。
答案 0 :(得分:1)
这是一个简单的代码snippits,了解如何使用Kotlin设置Retrofit。 首先,您将定义网络呼叫的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>?) {
}
}
)