用翻新和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
所以我的问题是:
- 是否有任何function调试对象/数组详细如laravel?
- 如何填充我的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