Android 如何从json解析数据

Android 如何从json解析数据,android,json,httprequest,Android,Json,Httprequest,我试图解析json数据,但有点奇怪,因为它没有显示正确的数据,但如果我试图在浏览器上调用json,它就有正确的数据 这就是我解析json数据的方式 doAsync { val url = localhost.getMovie() val request = okhttp3.Request.Builder().url(url).build() val client = OkHttpClient() uiThread {

我试图解析json数据,但有点奇怪,因为它没有显示正确的数据,但如果我试图在浏览器上调用json,它就有正确的数据

这就是我解析json数据的方式

doAsync {
        val url = localhost.getMovie()
        val request = okhttp3.Request.Builder().url(url).build()
        val client = OkHttpClient()

        uiThread {
            client.newCall(request).enqueue(object : Callback, okhttp3.Callback {
                override fun onResponse(call: okhttp3.Call?, response: okhttp3.Response?) {
                    val body = response?.body()?.string()
                    println(body)
                    uiThread {
                        val gson = GsonBuilder().create()
                        val movieFeed = gson.fromJson(body, Movie2Response::class.java)

                        Log.v("body", ""+body)
                        Log.v("feed", ""+movieFeed.data)

                        uiThread {
                        }
                    }
                }

                override fun onFailure(call: okhttp3.Call?, e: IOException) {
                    println("failed")
                }

            })
        }
    }
 V/body: {"data":[{"title":"Aquaman","description":""........
V/feed: [com.mqa.android.moviereview.model.Movie2@7509e04, com.mqa.android.moviereview.model.Movie2@890afed, com.mqa.android.moviereview.model.Movie2@9834e22, com.mqa.android.moviereview.model.Movie2@f02d0b3, com.mqa.android.moviereview.model.Movie2@d3b9670, com.mqa.android.moviereview.model.Movie2@4d55de9, com.mqa.android.moviereview.model.Movie2@cac2a6e, com.mqa.android.moviereview.model.Movie2@94fc50f, com.mqa.android.moviereview.model.Movie2@d9ba99c]
电影回应

class Movie2Response (val data: MutableList<Movie2>)
)

这是我从json数据中得到的

doAsync {
        val url = localhost.getMovie()
        val request = okhttp3.Request.Builder().url(url).build()
        val client = OkHttpClient()

        uiThread {
            client.newCall(request).enqueue(object : Callback, okhttp3.Callback {
                override fun onResponse(call: okhttp3.Call?, response: okhttp3.Response?) {
                    val body = response?.body()?.string()
                    println(body)
                    uiThread {
                        val gson = GsonBuilder().create()
                        val movieFeed = gson.fromJson(body, Movie2Response::class.java)

                        Log.v("body", ""+body)
                        Log.v("feed", ""+movieFeed.data)

                        uiThread {
                        }
                    }
                }

                override fun onFailure(call: okhttp3.Call?, e: IOException) {
                    println("failed")
                }

            })
        }
    }
 V/body: {"data":[{"title":"Aquaman","description":""........
V/feed: [com.mqa.android.moviereview.model.Movie2@7509e04, com.mqa.android.moviereview.model.Movie2@890afed, com.mqa.android.moviereview.model.Movie2@9834e22, com.mqa.android.moviereview.model.Movie2@f02d0b3, com.mqa.android.moviereview.model.Movie2@d3b9670, com.mqa.android.moviereview.model.Movie2@4d55de9, com.mqa.android.moviereview.model.Movie2@cac2a6e, com.mqa.android.moviereview.model.Movie2@94fc50f, com.mqa.android.moviereview.model.Movie2@d9ba99c]

它在身体上显示正确,但在数组中显示为那样。请帮我看看有什么问题。因为我想向微调器显示标题数据,您的数据一切正常。您刚刚忘记将默认实现添加到此对象的日志

class Movie2(/*your fields*/)
只需在上课前添加数据即可。会是那样的吗

data class Movie2(/*your fields*/)

科特林不知道怎么跟你拍电影。如果您想使用默认实现,请使用日志结果显示的代码。真正的问题是log函数
log.v(“feed”和“+movieFeed.data)
。如果要显示漂亮的日志,应通过以下方式重写
Movie2
类中的
toString()
方法:

打开
Movie2
并在
编辑器中右键单击
->
生成
->然后单击
toString()
覆盖它

对于Kotlin中的数据类,只需在
class
关键字之前添加
data


json数据中的键是否与Movie2Response的类变量名称匹配?如果json数据中的键与模型类中的变量名称不匹配,您将无法解析它。您将得到JsonParse异常。我还请求您在问题中发布您的模型类和响应json,以便我们能更好地帮助您。我已经为u@RamMandalDid共享了它。您使用json数据键交叉验证了序列化的名称字符串?代码看起来不错,但请在(movieFeed.data中的数据){Log.I(“title”)、“${data.title}的Log.v(“feed”、“+movieFeed.data)下面尝试一下)并查看日志,它打印了电影的标题。@qubaisyndiYantama ai编辑我的答案请检查