gpt4 book ai didi

android - 无法使用 Android Retrofit 访问 JSON 中的数据

转载 作者:行者123 更新时间:2023-12-02 12:45:00 24 4
gpt4 key购买 nike

根据我从网上看的视频,我正在尝试获取Json中的数据。我可以访问视频中的 Json 文件,但无法访问我自己的 Json 文件。这可能是因为它包含一些复杂的内容。这是 CryptoModel 类:

data class CryptoModel ( var hash: String, var price: String)

这是 CryptoApi 接口(interface):

  interface CryptoAPI {

@GET("otel.json")
fun getData(): Call<List<CryptoModel>>
}

这是 MainActivity:

    class MainActivity : AppCompatActivity() {

private val BASE_URL = "http://www.ipucubilisim.com.tr/"
private var cryptoModels: ArrayList<CryptoModel>? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

loadData()
}

private fun loadData() {

val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()

val service = retrofit.create(CryptoAPI::class.java)
val call = service.getData()

call.enqueue(object: Callback<List<CryptoModel>> {
override fun onFailure(call: Call<List<CryptoModel>>, t: Throwable) {
t.printStackTrace()
}

override fun onResponse
(call: Call<List<CryptoModel>>,
response: Response<List<CryptoModel>>
) {
if (response.isSuccessful)
response.body()?.let {
cryptoModels = ArrayList(it)

for (cryptoModel : CryptoModel in cryptoModels!!) {
println(cryptoModel.hash)
println(cryptoModel.price)
}
}
}
})
}
}

这是 Json 链接:http://www.ipucubilisim.com.tr/otel.json我在哪里犯错?我应该改变什么?如果你能帮忙我会很高兴这是错误 (Logcat):

    2020-06-04 12:18:10.223 10276-10276/? I/.retrofitkotli: Not late-enabling -Xcheck:jni (already on)
2020-06-04 12:18:10.296 10276-10276/? E/.retrofitkotli: Unknown bits set in runtime_flags: 0x8000
2020-06-04 12:18:10.297 10276-10276/? W/.retrofitkotli: Unexpected CPU variant for X86 using defaults: x86
2020-06-04 12:18:10.538 10276-10330/com.berkancalikoglu.retrofitkotlin D/libEGL: Emulator has host GPU support, qemu.gles is set to 1.
2020-06-04 12:18:10.520 10276-10276/com.berkancalikoglu.retrofitkotlin W/RenderThread: type=1400 audit(0.0:53): avc: denied { write } for name="property_service" dev="tmpfs" ino=6905 scontext=u:r:untrusted_app:s0:c135,c256,c512,c768 tcontext=u:object_r:property_socket:s0 tclass=sock_file permissive=0
2020-06-04 12:18:10.539 10276-10330/com.berkancalikoglu.retrofitkotlin W/libc: Unable to set property "qemu.gles" to "1": connection failed; errno=13 (Permission denied)
2020-06-04 12:18:10.558 10276-10330/com.berkancalikoglu.retrofitkotlin D/libEGL: loaded /vendor/lib/egl/libEGL_emulation.so
2020-06-04 12:18:10.560 10276-10330/com.berkancalikoglu.retrofitkotlin D/libEGL: loaded /vendor/lib/egl/libGLESv1_CM_emulation.so
2020-06-04 12:18:10.564 10276-10330/com.berkancalikoglu.retrofitkotlin D/libEGL: loaded /vendor/lib/egl/libGLESv2_emulation.so
2020-06-04 12:18:10.655 10276-10276/com.berkancalikoglu.retrofitkotlin W/.retrofitkotli: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (greylist, reflection, allowed)
2020-06-04 12:18:10.655 10276-10276/com.berkancalikoglu.retrofitkotlin W/.retrofitkotli: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed)
2020-06-04 12:18:10.726 10276-10276/com.berkancalikoglu.retrofitkotlin D/NetworkSecurityConfig: No Network Security Config specified, using platform default
2020-06-04 12:18:10.730 10276-10276/com.berkancalikoglu.retrofitkotlin W/.retrofitkotli: Accessing hidden method Ldalvik/system/CloseGuard;->get()Ldalvik/system/CloseGuard; (greylist,core-platform-api, reflection, allowed)
2020-06-04 12:18:10.730 10276-10276/com.berkancalikoglu.retrofitkotlin W/.retrofitkotli: Accessing hidden method Ldalvik/system/CloseGuard;->open(Ljava/lang/String;)V (greylist,core-platform-api, reflection, allowed)
2020-06-04 12:18:10.730 10276-10276/com.berkancalikoglu.retrofitkotlin W/.retrofitkotli: Accessing hidden method Ldalvik/system/CloseGuard;->warnIfOpen()V (greylist,core-platform-api, reflection, allowed)
2020-06-04 12:18:10.742 10276-10276/com.berkancalikoglu.retrofitkotlin W/.retrofitkotli: Accessing hidden field Lsun/misc/Unsafe;->theUnsafe:Lsun/misc/Unsafe; (greylist, reflection, allowed)
2020-06-04 12:18:10.742 10276-10276/com.berkancalikoglu.retrofitkotlin W/.retrofitkotli: Accessing hidden method Lsun/misc/Unsafe;->allocateInstance(Ljava/lang/Class;)Ljava/lang/Object; (greylist, reflection, allowed)
2020-06-04 12:18:10.800 10276-10328/com.berkancalikoglu.retrofitkotlin D/HostConnection: HostConnection::get() New Host Connection established 0xd7a7de60, tid 10328
2020-06-04 12:18:10.805 10276-10328/com.berkancalikoglu.retrofitkotlin D/HostConnection: HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_dma_v1 ANDROID_EMU_direct_mem ANDROID_EMU_host_composition_v1 ANDROID_EMU_host_composition_v2 ANDROID_EMU_vulkan ANDROID_EMU_deferred_vulkan_commands ANDROID_EMU_vulkan_null_optional_strings ANDROID_EMU_vulkan_create_resources_with_requirements ANDROID_EMU_YUV420_888_to_NV21 ANDROID_EMU_YUV_Cache ANDROID_EMU_async_unmap_buffer ANDROID_EMU_vulkan_free_memory_sync GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_gles_max_version_2
2020-06-04 12:18:10.807 10276-10328/com.berkancalikoglu.retrofitkotlin W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
2020-06-04 12:18:10.812 10276-10328/com.berkancalikoglu.retrofitkotlin D/eglCodecCommon: setVertexArrayObject: set vao to 0 (0) 0 0
2020-06-04 12:18:10.812 10276-10328/com.berkancalikoglu.retrofitkotlin D/EGL_emulation: eglCreateContext: 0xe31ad480: maj 2 min 0 rcv 2
2020-06-04 12:18:10.843 10276-10328/com.berkancalikoglu.retrofitkotlin D/EGL_emulation: eglMakeCurrent: 0xe31ad480: ver 2 0 (tinfo 0xd7ac1230)
2020-06-04 12:18:10.854 10276-10328/com.berkancalikoglu.retrofitkotlin W/Gralloc3: mapper 3.x is not supported
2020-06-04 12:18:10.855 10276-10328/com.berkancalikoglu.retrofitkotlin D/HostConnection: createUnique: call
2020-06-04 12:18:10.855 10276-10328/com.berkancalikoglu.retrofitkotlin D/HostConnection: HostConnection::get() New Host Connection established 0xd7a7f6c0, tid 10328
2020-06-04 12:18:10.862 10276-10328/com.berkancalikoglu.retrofitkotlin D/HostConnection: HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_dma_v1 ANDROID_EMU_direct_mem ANDROID_EMU_host_composition_v1 ANDROID_EMU_host_composition_v2 ANDROID_EMU_vulkan ANDROID_EMU_deferred_vulkan_commands ANDROID_EMU_vulkan_null_optional_strings ANDROID_EMU_vulkan_create_resources_with_requirements ANDROID_EMU_YUV420_888_to_NV21 ANDROID_EMU_YUV_Cache ANDROID_EMU_async_unmap_buffer ANDROID_EMU_vulkan_free_memory_sync GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_gles_max_version_2
2020-06-04 12:18:10.862 10276-10328/com.berkancalikoglu.retrofitkotlin D/eglCodecCommon: allocate: Ask for block of size 0x1000
2020-06-04 12:18:10.862 10276-10328/com.berkancalikoglu.retrofitkotlin D/eglCodecCommon: allocate: ioctl allocate returned offset 0x3ff807000 size 0x2000
2020-06-04 12:18:10.878 10276-10328/com.berkancalikoglu.retrofitkotlin D/EGL_emulation: eglMakeCurrent: 0xe31ad480: ver 2 0 (tinfo 0xd7ac1230)
2020-06-04 12:18:10.879 10276-10328/com.berkancalikoglu.retrofitkotlin D/eglCodecCommon: setVertexArrayObject: set vao to 0 (0) 1 0
2020-06-04 12:18:10.934 10276-10276/com.berkancalikoglu.retrofitkotlin W/System.err: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
2020-06-04 12:18:10.934 10276-10276/com.berkancalikoglu.retrofitkotlin W/System.err: at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:350)
2020-06-04 12:18:10.934 10276-10276/com.berkancalikoglu.retrofitkotlin W/System.err: at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:80)
2020-06-04 12:18:10.934 10276-10276/com.berkancalikoglu.retrofitkotlin W/System.err: at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
2020-06-04 12:18:10.934 10276-10276/com.berkancalikoglu.retrofitkotlin W/System.err: at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:39)
2020-06-04 12:18:10.935 10276-10276/com.berkancalikoglu.retrofitkotlin W/System.err: at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:27)
2020-06-04 12:18:10.935 10276-10276/com.berkancalikoglu.retrofitkotlin W/System.err: at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:225)
2020-06-04 12:18:10.935 10276-10276/com.berkancalikoglu.retrofitkotlin W/System.err: at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:121)
2020-06-04 12:18:10.935 10276-10276/com.berkancalikoglu.retrofitkotlin W/System.err: at okhttp3.RealCall$AsyncCall.execute(RealCall.java:206)
2020-06-04 12:18:10.935 10276-10276/com.berkancalikoglu.retrofitkotlin W/System.err: at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
2020-06-04 12:18:10.935 10276-10276/com.berkancalikoglu.retrofitkotlin W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
2020-06-04 12:18:10.935 10276-10276/com.berkancalikoglu.retrofitkotlin W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
2020-06-04 12:18:10.935 10276-10276/com.berkancalikoglu.retrofitkotlin W/System.err: at java.lang.Thread.run(Thread.java:919)

这里是一个如何与其他人正常工作的 Json 文件(Logcat)的例子:

2020-06-04 12:44:51.463 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: XVG
2020-06-04 12:44:51.463 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: 0.00448927
2020-06-04 12:44:51.463 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: XVP
2020-06-04 12:44:51.463 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: 0.00391901
2020-06-04 12:44:51.463 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: XWP
2020-06-04 12:44:51.463 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: 0.03527198
2020-06-04 12:44:51.463 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: XYO
2020-06-04 12:44:51.463 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: 0.00030497
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: XZC
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: 4.75104317
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: YAP
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: 0.05905905
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: YCC
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: 0.00576147
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: YCE
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: 0.00047793
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: YEC
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: 0.07599428
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: YEE
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: 0.00095374
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: YEED
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: 0.00018321
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: YLC
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: 0.00049317
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: YLD
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: 0.00632366
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: YNDXCX
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: 41.45000000
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: YO
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: 963.95769068
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: YOC
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: 0.00040861
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: YOU
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: 0.01514782
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: YOUC
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: 0.11189408
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: YOYOW
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: 0.00947287
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: YTN
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: 0.00048801
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: YUN
2020-06-04 12:44:51.464 10483-10483/com.berkancalikoglu.retrofitkotlin I/System.out: 0.00319961

最佳答案

这完全是在处理数据:

为您的模型类创建单独的文件:

class Crypto {
@SerializedName("responseCode")
@Expose
var responseCode: Int? = null
@SerializedName("errors")
@Expose
var errors: Any? = null
@SerializedName("message")
@Expose
var message: Any? = null
@SerializedName("result")
@Expose
var result: Result? = null

}

class Result {
@SerializedName("requestId")
@Expose
var requestId: String? = null
@SerializedName("offers")
@Expose
var offers: Offers? = null

}

class Offers {
@SerializedName("hotels")
@Expose
var hotels: List<Hotel>? = null

}

class Hotel {
@SerializedName("id")
@Expose
var id: Int? = null
@SerializedName("details")
@Expose
var details: Any? = null
@SerializedName("rooms")
@Expose
var rooms: List<Room>? = null
@SerializedName("cached")
@Expose
var cached: Boolean? = null
@SerializedName("df")
@Expose
var df: Boolean? = null
@SerializedName("fc")
@Expose
var fc: Boolean? = null

}

class Room {
@SerializedName("reference")
@Expose
var reference: String? = null
@SerializedName("type")
@Expose
var type: Any? = null
@SerializedName("images")
@Expose
var images: List<Any>? = null
@SerializedName("offers")
@Expose
var offers: List<Offer>? = null
@SerializedName("facilities")
@Expose
var facilities: List<Any>? = null
@SerializedName("information")
@Expose
var information: List<Any>? = null
@SerializedName("alerts")
@Expose
var alerts: List<Any>? = null
@SerializedName("description")
@Expose
var description: Any? = null

}

class Offer {
@SerializedName("hash")
@Expose
var hash: String? = null
@SerializedName("price")
@Expose
var price: Double? = null

}

并更改 CryptoApi 接口(interface):

interface CryptoAPI {

@GET("otel.json")
fun getData(): Call<Crypto>
}

并将其访问为:

private val BASE_URL = "http://www.ipucubilisim.com.tr/"
fun loadData() {

val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()

val service = retrofit.create(CryptoAPI::class.java)
val call = service.getData()

call.enqueue(object: Callback<Crypto> {
override fun onFailure(call: Call<Crypto>, t: Throwable) {
t.printStackTrace()
}

override fun onResponse(call: Call<Crypto>, response: Response<Crypto>) {
if(response.isSuccessful){
response.body()?.let { crypto ->
val hotels = crypto.result?.offers?.hotels
hotels?.forEach { hotel ->
val rooms = hotel.rooms
rooms?.forEach { room ->
room.offers?.forEach { offer -> Log.d("101",offer.hash) }
}
}
}
}
}
})
}

输出数据:

2020-06-04 16:47:44.098 9082-9082/com.example.bottomsheet D/101: 911619993d24
2020-06-04 16:47:44.098 9082-9082/com.example.bottomsheet D/101: 404201837898
2020-06-04 16:47:44.098 9082-9082/com.example.bottomsheet D/101: 663972861500
2020-06-04 16:47:44.098 9082-9082/com.example.bottomsheet D/101: 387584646986
2020-06-04 16:47:44.098 9082-9082/com.example.bottomsheet D/101: 021175058ce5
2020-06-04 16:47:44.098 9082-9082/com.example.bottomsheet D/101: 53576001687f
2020-06-04 16:47:44.098 9082-9082/com.example.bottomsheet D/101: 6227267709c3
2020-06-04 16:47:44.098 9082-9082/com.example.bottomsheet D/101: 414423278046
2020-06-04 16:47:44.099 9082-9082/com.example.bottomsheet D/101: 6084986723a1
2020-06-04 16:47:44.099 9082-9082/com.example.bottomsheet D/101: 872143937dd8
2020-06-04 16:47:44.099 9082-9082/com.example.bottomsheet D/101: 254004362aed
2020-06-04 16:47:44.099 9082-9082/com.example.bottomsheet D/101: 519524284ab3
2020-06-04 16:47:44.099 9082-9082/com.example.bottomsheet D/101: 71377401675f
2020-06-04 16:47:44.099 9082-9082/com.example.bottomsheet D/101: 445389342b48
2020-06-04 16:47:44.099 9082-9082/com.example.bottomsheet D/101: 138200015643
2020-06-04 16:47:44.099 9082-9082/com.example.bottomsheet D/101: 640381103145
2020-06-04 16:47:44.099 9082-9082/com.example.bottomsheet D/101: 262239998a7e
2020-06-04 16:47:44.099 9082-9082/com.example.bottomsheet D/101: 517968377e04
2020-06-04 16:47:44.099 9082-9082/com.example.bottomsheet D/101: 146631345449
2020-06-04 16:47:44.099 9082-9082/com.example.bottomsheet D/101: 013286743158
2020-06-04 16:47:44.099 9082-9082/com.example.bottomsheet D/101: 3013861859c4
2020-06-04 16:47:44.100 9082-9082/com.example.bottomsheet D/101: 857449974cec
2020-06-04 16:47:44.100 9082-9082/com.example.bottomsheet D/101: 4945242072c4

关于android - 无法使用 Android Retrofit 访问 JSON 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62191299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com