无法使用Android Studio访问JSON中的数据

问题描述 投票:1回答:2

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

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

这里是CryptoApi接口:

  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
android kotlin
2个回答
0
投票

您可以这样使用:

class ResponseData {

    @SerializedName("responseCode")
    @Expose
    var responseCode: Integer? = null
    @SerializedName("errors")
    @Expose
    var errors: String? = null
    @SerializedName("message")
    @Expose
    var message: String? = null
    @SerializedName("result")
    @Expose
    var result: Result? = null
}

class Result {

    @SerializedName("requestId")
    @Expose
    var requestId: String? = null
    @SerializedName("offers")
    @Expose
    var offers: Offers? = null
    @SerializedName("filters")
    @Expose
    var filters: Filters? = null
    @SerializedName("sortingMethods")
    @Expose
    var sortingMethods: List<SortingMethod>? = null
}

//Other classes
.....

并改变您的乐趣:

interface CryptoAPI {

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

0
投票

这完全可以处理数据:

型号:

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: Type? = 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

}

并更改CryptoApi接口:

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) }
                           }
                       }
                   }
               }
            }
        })
    }
热门问题
推荐问题
最新问题