繁体   English   中英

使用 Android 应用程序的 JSON 和 API 数据检索图形数据

[英]Retrieving Graph Data using JSON and API data for Android App

我正在尝试主要在 Kotlin 中创建一个 Android 移动应用程序来跟踪 Covid-19 数据。 我正在使用 retrofit 来检索 API 数据。 但是,当运行应用程序来测试我的数据时,我的数据是空白的。 由于某种原因,未检索到 API 数据。 我使用的站点是 CovidActNow.org,它需要一个 API 密钥。

我在我的 MainActivity 文件中调用基本 URL :

private const val BASE_URL = "https://api.covidactnow.org/v2/"

然后我还创建了一个名为 CovidData 的 Kotlin 文件,其中包含:

package com.example.covid19tracker

import com.google.gson.annotations.SerializedName
import java.util.*


data class CovidData(
    @SerializedName("date") val date: Date,
    @SerializedName("positiveTests") val positiveTests: Int,
    @SerializedName("negativeTests") val negativeTests: Int,
    @SerializedName("newDeaths") val newDeaths: Int,
    @SerializedName("state") val state: String

)

和服务应该通过以下方式获取数据:

package com.example.covid19tracker

import retrofit2.Call
import retrofit2.http.GET

interface Services {
    @GET("country/US.json?apiKey={myAPIkeywithoutbrackets}")
    fun getNationalData(): Call<List<CovidData>>

    @GET("states.json?apiKey={myAPIkeywithoutbrackets}")
    fun getStatesData(): Call<List<CovidData>>
}

我不确定我是否只是错误地调用了 API 密钥,或者我是否有错字,但我将不胜感激任何反馈或帮助!

我对国家数据的响应代码是:

{"fips": "0", "country": "US", "state": null, "county": null, "level": "country", "lat": null, "locationId": "iso1:us", "long": null, "population": 331486822, "metrics": {"testPositivityRatio": 0.242, "testPositivityRatioDetails": {"source": "other"}, "caseDensity": 132.5, "contactTracerCapacityRatio": null, "infectionRate": 0.8, "infectionRateCI90": 0.1, "icuCapacityRatio": 0.8, "vaccinationsInitiatedRatio": 0.755, "vaccinationsCompletedRatio": 0.639, "vaccinationsAdditionalDoseRatio": 0.266}, "riskLevels": {"overall": 5, "testPositivityRatio": 3, "caseDensity": 5, "contactTracerCapacityRatio": 4, "infectionRate": 0, "icuCapacityRatio": 1}, "cdcTransmissionLevel": 3, "actuals": {"cases": 75285898, "deaths": 889522, "positiveTests": 70042418, "negativeTests": 684690203, "contactTracers": 66210, "hospitalBeds": {"capacity": 686316, "currentUsageTotal": 526948, "currentUsageCovid": 125691}, "icuBeds": {"capacity": 78639, "currentUsageTotal": 63033, "currentUsageCovid": 22118}, "newCases": 295374, "newDeaths": 3579, "vaccinesDistributed": 667094365, "vaccinationsInitiated": 250184240, "vaccinationsCompleted": 211954555, "vaccinationsAdditionalDose": 88286037, "vaccinesAdministered": 539921122, "vaccinesAdministeredDemographics": null, "vaccinationsInitiatedDemographics": null}, "annotations": {"cases": {"sources": [{"type": "NYTimes", "url": "https://github.com/nytimes/covid-19-data", "name": "The New York Times"}], "anomalies": []}, "deaths": {"sources": [{"type": "NYTimes", "url": "https://github.com/nytimes/covid-19-data", "name": "The New York Times"}], "anomalies": []}, "positiveTests": null, "negativeTests": null, "contactTracers": null, "hospitalBeds": null, "icuBeds": null, "newCases": null, "newDeaths": {"sources": [], "anomalies": [{"date": "2020-06-25", "type": "zscore_outlier", "original_observation": 2466.0}]}, "vaccinesDistributed": {"sources": [{"type": "other", "url": "https://data.cdc.gov/Vaccinations/COVID-19-Vaccinations-in-the-United-States-Jurisdi/unsk-b7fc", "name": "Centers for Disease Control and Prevention"}], "anomalies": []}, "vaccinationsInitiated": {"sources": [{"type": "other", "url": "https://data.cdc.gov/Vaccinations/COVID-19-Vaccinations-in-the-United-States-Jurisdi/unsk-b7fc", "name": "Centers for Disease Control and Prevention"}], "anomalies": []}, "vaccinationsCompleted": {"sources": [{"type": "other", "url": "https://data.cdc.gov/Vaccinations/COVID-19-Vaccinations-in-the-United-States-Jurisdi/unsk-b7fc", "name": "Centers for Disease Control and Prevention"}], "anomalies": []}, "vaccinationsAdditionalDose": {"sources": [{"type": "other", "url": "https://data.cdc.gov/Vaccinations/COVID-19-Vaccinations-in-the-United-States-Jurisdi/unsk-b7fc", "name": "Centers for Disease Control and Prevention"}], "anomalies": []}, "vaccinesAdministered": {"sources": [{"type": "other", "url": "https://data.cdc.gov/Vaccinations/COVID-19-Vaccinations-in-the-United-States-Jurisdi/unsk-b7fc", "name": "Centers for Disease Control and Prevention"}], "anomalies": []}, "testPositivityRatio": null, "caseDensity": {"sources": [{"type": "NYTimes", "url": "https://github.com/nytimes/covid-19-data", "name": "The New York Times"}], "anomalies": []}, "contactTracerCapacityRatio": null, "infectionRate": {"sources": [{"type": "NYTimes", "url": "https://github.com/nytimes/covid-19-data", "name": "The New York Times"}], "anomalies": []}, "infectionRateCI90": {"sources": [{"type": "NYTimes", "url": "https://github.com/nytimes/covid-19-data", "name": "The New York Times"}], "anomalies": []}, "icuCapacityRatio": null, "vaccinationsInitiatedRatio": null, "vaccinationsCompletedRatio": null, "vaccinationsAdditionalDoseRatio": null}, "lastUpdatedDate": "2022-02-02", "url": null}

发出请求后您收到的响应代码和正文是什么?

Please make sure that the:- 1:- Base URL is pointing to the correct API 2:- country/US.json?apiKey={myAPIkeywithoutbrackets} is returning the list of the CovidData 3:- Change your object into this:-

package com.example.covid19tracker

import com.google.gson.annotations.SerializedName
import java.util.*

@Parcelize
data class CovidData(
    @SerializedName("date") val date: Date,
    @SerializedName("positiveTests") val positiveTests: Int,
    @SerializedName("negativeTests") val negativeTests: Int,
    @SerializedName("newDeaths") val newDeaths: Int,
    @SerializedName("state") val state: String
): Parcelable

我检查了附件 API URL > https://api.covidactnow.org/v2/

如果您使用以下 API https://apidocs.covidactnow.org/api/#tag/County-Data/paths/~1county~1{fips}.json?apiKey={apiKey}/get

我认为你没有 map class 属性与 Json 数据正确。

因此,请尝试确保您将从 API 返回的数据与您正在使用的数据 class 映射到 map Z0ECD10D8ZA 数据到它。

请尝试以下 class 我认为它对您有用。

@Parcelize
data class CovidData(
        @SerializedName("state") val state: String,
        @SerializedName("lastUpdatedDate") val date: Date,
        @SerializedName("actuals") val actuals: ActualData,

): Parcelable

@Parcelize
data class ActualData(
        @SerializedName("positiveTests") val positiveTests: Int,
        @SerializedName("negativeTests") val negativeTests: Int,
        @SerializedName("newDeaths") val newDeaths: Int
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM