Android 在kotlin中使用改型解析JSON对象
我试图使用kotlin中的翻新库来显示json数据 这是我的Json:Android 在kotlin中使用改型解析JSON对象,android,json,kotlin,retrofit,Android,Json,Kotlin,Retrofit,我试图使用kotlin中的翻新库来显示json数据 这是我的Json: [ { "login": "mojombo", "id": 1, }, { "login": "defunkt", "id": 2, } ] 我的主要活动 call.enqueue(object : Callback<UserResponse> { override fun onResponse(call: Call<UserResp
[
{
"login": "mojombo",
"id": 1,
},
{
"login": "defunkt",
"id": 2,
}
]
我的主要活动
call.enqueue(object : Callback<UserResponse> {
override fun onResponse(call: Call<UserResponse>, response: Response<UserResponse>) {
Log.e("list","list")
val countrylist = response.body()
for (size in response.body()) {
System.out.println(size.toString())
}
// var listOfMovies: List<UserResponse> = response.body()?.results!!
// myCustomAdapter = UserListAdapter(applicationContext, listOfMovies)
// recyclerView.setAdapter(myCustomAdapter)
progressBar.visibility = View.GONE
}
override fun onFailure(call: Call<UserResponse>?, t: Throwable?) {
progressBar.visibility = View.GONE
Log.e("list", t.toString())
}
})
call.enqueue(对象:回调{
覆盖fun onResponse(调用:调用,响应:响应){
Log.e(“列表”、“列表”)
val countrylist=response.body()
对于(响应中的大小.body()){
System.out.println(size.toString())
}
//var listOfMovies:List=response.body()?.results!!
//myCustomAdapter=UserListAdapter(applicationContext,listOfMovies)
//recyclerView.setAdapter(myCustomAdapter)
progressBar.visibility=View.GONE
}
覆盖失效时的乐趣(调用:调用?、t:可丢弃?){
progressBar.visibility=View.GONE
Log.e(“list”,t.toString())
}
})
这就是我们应用程序上的功能
object GetFAQsAPI {
private val LOG_TAG = GetFAQsAPI.javaClass.simpleName
interface ThisCallback {
fun onSuccess(getFAQs: GetFAQs)
fun onFailure(failureMessage: String)
fun onError(errorMessage: String)
}
/* POST */
fun postData(jo: JsonObject, callback: GetFAQsAPI.ThisCallback) {
val call = Service.getService().get_faqs(jo)
call.enqueue(object : Callback<JsonObject> {
override fun onResponse(call: Call<JsonObject>, response: Response<JsonObject>) {
//Log.e(LOG_TAG, response.body().toString());
try {
if (response.body()?.get("success")!!.asBoolean) {
val gson = GsonBuilder().setPrettyPrinting().create()
val getFAQs = gson.fromJson(response.body(), GetFAQs::class.java)
callback.onSuccess(getFAQs)
} else {
Log.e(LOG_TAG, "else")
val error = response.body()!!.get("err").asString
callback.onError(error)
}
} catch (e: Exception) {
Log.e(LOG_TAG, "exception" + e.localizedMessage)
callback.onFailure(e.message!!)
}
}
override fun onFailure(call: Call<JsonObject>, t: Throwable) {
Log.e(LOG_TAG, "onFailure: " + t.message)
callback.onFailure(t.message!!)
}
})
}
}
希望这能有所帮助。这就是我们的应用程序
object GetFAQsAPI {
private val LOG_TAG = GetFAQsAPI.javaClass.simpleName
interface ThisCallback {
fun onSuccess(getFAQs: GetFAQs)
fun onFailure(failureMessage: String)
fun onError(errorMessage: String)
}
/* POST */
fun postData(jo: JsonObject, callback: GetFAQsAPI.ThisCallback) {
val call = Service.getService().get_faqs(jo)
call.enqueue(object : Callback<JsonObject> {
override fun onResponse(call: Call<JsonObject>, response: Response<JsonObject>) {
//Log.e(LOG_TAG, response.body().toString());
try {
if (response.body()?.get("success")!!.asBoolean) {
val gson = GsonBuilder().setPrettyPrinting().create()
val getFAQs = gson.fromJson(response.body(), GetFAQs::class.java)
callback.onSuccess(getFAQs)
} else {
Log.e(LOG_TAG, "else")
val error = response.body()!!.get("err").asString
callback.onError(error)
}
} catch (e: Exception) {
Log.e(LOG_TAG, "exception" + e.localizedMessage)
callback.onFailure(e.message!!)
}
}
override fun onFailure(call: Call<JsonObject>, t: Throwable) {
Log.e(LOG_TAG, "onFailure: " + t.message)
callback.onFailure(t.message!!)
}
})
}
}
希望这会有所帮助。这是我在kotlin中使用改型和rxjava构建的一个应用程序,使用测试API以最好的方式实现 模型 改装包 IMyApi接口
interface IMyApi {
@get:GET("posts")
val posts: Observable<List<Post>>
}
适配器包
后适应级
class PostAdapter(private val context: Context, private val postList: List<Post>)
:RecyclerView.Adapter<PostViewHolder>()
{
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int):
PostViewHolder {
val itemView = LayoutInflater.from(parent.context)
.inflate(R.layout.post_item, parent, false)
return PostViewHolder(itemView)
}
override fun getItemCount(): Int {
return postList.size
}
override fun onBindViewHolder(holder: PostViewHolder, position: Int)
{
holder.userId.text = postList[position].userID.toString()
holder.title.text = postList[position].title
holder.body.text = StringBuilder(postList[position].body.substring(0,20))
.append("...").toString()
}
}
主要活动
class MainActivity : AppCompatActivity() {
private lateinit var jsonApi: IMyApi
private var compositeDisposable: CompositeDisposable = CompositeDisposable()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Init api
val retrofit = RetrofitClient.instance
jsonApi = retrofit.create(IMyApi::class.java)
// View
recycler_posts.layoutManager = LinearLayoutManager(this)
recycler_posts.setHasFixedSize(true)
fetchData()
}
private fun fetchData() {
compositeDisposable.add(jsonApi.posts
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { posts->displayData(posts)})
}
private fun displayData(posts: List<Post>?) {
val adapter = PostAdapter(this, posts!!)
recycler_posts.adapter = adapter
}
}
class MainActivity:AppCompatActivity(){
私有lateinit var jsonApi:IMyApi
私有变量compositeDisposable:compositeDisposable=compositeDisposable()
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//初始化api
val REFRONATION=REFRONATIONCLIENT.instance
jsonApi=reformation.create(IMyApi::class.java)
//看法
回收商_posts.layoutManager=LinearLayoutManager(此)
回收商_posts.setHasFixedSize(真)
fetchData()
}
私有数据(){
compositeDisposable.add(jsonApi.posts
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe{posts->displayData(posts)})
}
私人娱乐显示数据(帖子:列表?){
val adapter=PostAdapter(这个,posts!!)
回收器\u posts.adapter=适配器
}
}
如上图所示,使用它将帮助您满怀希望地解决您的问题。此外,在代码中,您还会遇到“回收站帖子”。这是添加到活动_main中的回收者的id。如果您需要我将其包括在内,请让我知道这是我在kotlin中使用改型和rxjava以测试API的最佳方式构建的应用程序 模型 改装包 IMyApi接口
interface IMyApi {
@get:GET("posts")
val posts: Observable<List<Post>>
}
适配器包
后适应级
class PostAdapter(private val context: Context, private val postList: List<Post>)
:RecyclerView.Adapter<PostViewHolder>()
{
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int):
PostViewHolder {
val itemView = LayoutInflater.from(parent.context)
.inflate(R.layout.post_item, parent, false)
return PostViewHolder(itemView)
}
override fun getItemCount(): Int {
return postList.size
}
override fun onBindViewHolder(holder: PostViewHolder, position: Int)
{
holder.userId.text = postList[position].userID.toString()
holder.title.text = postList[position].title
holder.body.text = StringBuilder(postList[position].body.substring(0,20))
.append("...").toString()
}
}
主要活动
class MainActivity : AppCompatActivity() {
private lateinit var jsonApi: IMyApi
private var compositeDisposable: CompositeDisposable = CompositeDisposable()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Init api
val retrofit = RetrofitClient.instance
jsonApi = retrofit.create(IMyApi::class.java)
// View
recycler_posts.layoutManager = LinearLayoutManager(this)
recycler_posts.setHasFixedSize(true)
fetchData()
}
private fun fetchData() {
compositeDisposable.add(jsonApi.posts
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { posts->displayData(posts)})
}
private fun displayData(posts: List<Post>?) {
val adapter = PostAdapter(this, posts!!)
recycler_posts.adapter = adapter
}
}
class MainActivity:AppCompatActivity(){
私有lateinit var jsonApi:IMyApi
私有变量compositeDisposable:compositeDisposable=compositeDisposable()
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//初始化api
val REFRONATION=REFRONATIONCLIENT.instance
jsonApi=reformation.create(IMyApi::class.java)
//看法
回收商_posts.layoutManager=LinearLayoutManager(此)
回收商_posts.setHasFixedSize(真)
fetchData()
}
私有数据(){
compositeDisposable.add(jsonApi.posts
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe{posts->displayData(posts)})
}
私人娱乐显示数据(帖子:列表?){
val adapter=PostAdapter(这个,posts!!)
回收器\u posts.adapter=适配器
}
}
如上图所示,使用它将帮助您满怀希望地解决您的问题。此外,在代码中,您还会遇到“回收站帖子”。这是添加到活动_main中的回收者的id。如果您需要我将其包括在内,请让我知道Hi,如果您打印您的响应。body()您得到了什么?如果您已经得到了响应,您需要使用gson解析它,然后您将能够获得pojo的元素,并且可能不会在响应中循环。body()正如你们所做的。我的错是我在写代码,你们从列表中只得到一项。正因为如此,我得到了JSON exceptionHi,如果你打印你的response.body(),你会得到什么?如果你已经得到了响应,你可能需要使用gson解析它,然后你就可以得到pojo的元素,可能不会在response.body()中循环正如你们所做的。我的错是我在写代码,你们从列表中只得到一项。因此,我得到了JSON exceptionGetFAQs是使用json2schema网站检索的模型类。GetFAQs是使用json2schema网站检索的模型类。