用翻新和moshi填充微调

我是Android开发人员(包括java或kotlin)的初学者。 我正在尝试用改造和moshi从json填充微调器,但我不知道如何将其填充到微调器中。 说实话,我不知道Json数据的返回是否正确,因为Log.d()返回不是作为dump()laravel或php的细节。

脚本在活动onCreate(请阅读脚本的评论,我把Log.d()调试结果) Log.d()

 val task = object : AsyncTask<Void, Void, Response<List>>() { override fun doInBackground(vararg params: Void): Response<List> { val typeAPI = RestAPI() val callResponse = typeAPI.getNews() val response = callResponse.execute() return response } override fun onPostExecute(response: Response<List>) { if (response.isSuccessful) { val news = response.body() Log.d("test:", news!![0].data.toString()) // method 'java.lang.String com.example.mockie.tigaer.api.TypeDataResponse.toString()' on a null object reference Log.d("test:", news!!.size.toString()) // it says 67 but the data from the url is 63 array of json object Log.d("test:", news!![0].toString()) // com.example.mockie.tigaer.api.ProductTypeResponse@f17fd5e } } 

RestApi.kt

 import retrofit2.Call import retrofit2.Retrofit import retrofit2.converter.moshi.MoshiConverterFactory class RestAPI() { private val tigaerApi: TigaerApi init { val retrofit = Retrofit.Builder() .baseUrl("http://app.tigaer.id/laravel/") .addConverterFactory(MoshiConverterFactory.create()) .build() tigaerApi = retrofit.create(TigaerApi::class.java) } fun getNews(): Call<List> { return tigaerApi.getTop() } } 

ApiModel.kt

 package com.example.mockie.tigaer.api class ProductTypeResponse(val data: TypeDataResponse) class TypeDataResponse( val children: List ) class ProductTypeChildrenResponse(val data: ProductTypeDataResponse) class ProductTypeDataResponse( val productType: String, val readable: String ) 

TigaerApi.kt

 import retrofit2.Call import retrofit2.http.GET import retrofit2.http.Query interface TigaerApi { @GET("api/type") fun getTop(): Call<List> } 

返回Json: https ://jsoneditoronline.org/ ? id = ce90c41b859218e746e41d64eddb4c30

所以我的问题是:

  1. 是否有任何function调试对象/数组详细如laravel?
  2. 如何填充我的JSON返回数据到微调?

这里是代码相同,我修改和集成在您的代码只:

“MainActivity.kt”类:

  class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) var spinner: Spinner = findViewById(R.id.spinner) val task = object : AsyncTask>>() { override fun doInBackground(vararg params: Void): Response> { val typeAPI = RestAPI() val callResponse = typeAPI.getNews() val response = callResponse.execute() return response } override fun onPostExecute(response: Response>) { if (response.isSuccessful) { val news: List? = response.body() var adapter: SpinnerAdapter = SpinnerAdapter(this@MainActivity, news!!); spinner.adapter=adapter } } }.execute() } } 

现在布局“activity_main”::

     

现在微调适配器为“SpinnerAdapter”::

  class SpinnerAdapter internal constructor(internal var context: Context, internal var list: List) : BaseAdapter() { override fun getCount(): Int { return list.size } override fun getItem(i: Int): Any? { return null } override fun getItemId(i: Int): Long { return 0 } override fun getView(i: Int, view: View?, viewGroup: ViewGroup): View { var view = view if (view == null) { val inflater = LayoutInflater.from(context) view = inflater.inflate(R.layout.item, viewGroup, false) } val textView = view!!.findViewById(R.id.textView) textView.text = list[i].productType + " " + list[i].readable return textView } } 

微调项目布局为“item”::

      

现在文件中的一些变化::

“ApiModel.kt” ::

  class TypeDataResponse( val children: List ) class ProductTypeChildrenResponse(val data: ProductTypeDataResponse) class ProductTypeDataResponse( val productType: String, val readable: String ) 

“RestAPI.kt”

  class RestAPI() { private val tigaerApi: TigaerApi init { val retrofit = Retrofit.Builder() .baseUrl("http://app.tigaer.id/laravel/") .addConverterFactory(MoshiConverterFactory.create()) .build() tigaerApi = retrofit.create(TigaerApi::class.java) } fun getNews(): Call> { return tigaerApi.getTop() } } 

因此它会为你工作。

请按照所有文件,让我知道如果需要任何帮助。

谢谢。

是否有任何function调试对象/数组详细如laravel?

通过这个在调试模式下运行你的应用程序。 https://developer.android.com/studio/debug/index.html

在应用程序运行时,您总是可以使用断点来评估expression式。 而不是记录在这一行放置一个断点。

  val news = response.body() 

所以当你从服务器收到响应时,应用程序将停止在这一点上,你可以检查你得到的回应详细。

如何填充我的JSON返回数据到微调?

如果您以Json格式从服务器获得响应(如提供的链接所示),则必须将数据解析为对象列表(POJO)。 然后你必须转发这些数据(也许你必须遍历列表来获得所需的数据,因为你在每个对象中有两个字段)到适配器中,并将该适配器设置到你的微调器。 在下面的链接中解释得非常清楚。 https://developer.android.com/guide/topics/ui/controls/spinner.html