Android дооснащение 2 | получить список данных из JSON ответа - PullRequest
2 голосов
/ 26 февраля 2020

Я использую дооснащение2. Я делаю HTTP-вызовы и получаю данные JSON в качестве ответа:

[
    {
        "ActualTotalLoadByMonthValue": "4264156.37",
        "AreaName": "Hungary",
        "AreaTypeCode": "CTY",
        "Dataset": "ActualTotalLoad",
        "MapCode": "HU",
        "Month": "1",
        "ResolutionCode": "PT15M",
        "Source": "entso-e",
        "Year": "2018"
    }
]

Я хочу взять контекст этого JSON и представить его в массиве, но для начала я не знаю, как получить контекст моего ответа. Я попытался с response.body (), но это не похоже на работу. Вот мой код:

val call = RequestManager.service.getactualtotalload(areaName,resolution, datetype ,"2018")
            call.enqueue(object : Callback<List<Response1>> {
                override fun onResponse(call: Call<List<Response1>>, response: Response<List<Response1>>)
                {
                    loaderout.visibility = View.GONE
                    if (response.isSuccessful) {
                        Log.d("deee","Json " + response.body().toString())
                        openTableActivity()
                    } else {
                    }
                }

                override fun onFailure(call: Call<List<Response1>>, t: Throwable) {
                    loaderout.visibility = View.GONE
                }
            })

, в то время как Response1 выглядит так:

public class Response1 {

    @SerializedName("ActualTotalLoadByMonthValue")
    @Expose
    private String actualTotalLoadByMonthValue;
    @SerializedName("AreaName")
    @Expose
    private String areaName;
    @SerializedName("AreaTypeCode")
    @Expose
    private String areaTypeCode;
    @SerializedName("Dataset")
    @Expose
    private String dataset;
    @SerializedName("MapCode")
    @Expose
    private String mapCode;
    @SerializedName("Month")
    @Expose
    private String month;
    @SerializedName("ResolutionCode")
    @Expose
    private String resolutionCode;
    @SerializedName("Source")
    @Expose
    private String source;
    @SerializedName("Year")
    @Expose
    private String year;

    public String getActualTotalLoadByMonthValue() {
        return actualTotalLoadByMonthValue;
    }

    public void setActualTotalLoadByMonthValue(String actualTotalLoadByMonthValue) {
        this.actualTotalLoadByMonthValue = actualTotalLoadByMonthValue;
    }

    public String getAreaName() {
        return areaName;
    }

    public void setAreaName(String areaName) {
        this.areaName = areaName;
    }

    public String getAreaTypeCode() {
        return areaTypeCode;
    }

    public void setAreaTypeCode(String areaTypeCode) {
        this.areaTypeCode = areaTypeCode;
    }

    public String getDataset() {
        return dataset;
    }

    public void setDataset(String dataset) {
        this.dataset = dataset;
    }

    public String getMapCode() {
        return mapCode;
    }

    public void setMapCode(String mapCode) {
        this.mapCode = mapCode;
    }

    public String getMonth() {
        return month;
    }

    public void setMonth(String month) {
        this.month = month;
    }

    public String getResolutionCode() {
        return resolutionCode;
    }

    public void setResolutionCode(String resolutionCode) {
        this.resolutionCode = resolutionCode;
    }

    public String getSource() {
        return source;
    }

    public void setSource(String source) {
        this.source = source;
    }

    public String getYear() {
        return year;
    }

    public void setYear(String year) {
        this.year = year;
    }

Также мой RequestManager:

object RequestManager {
    val interceptor = HttpLoggingInterceptor()
    val client = OkHttpClient.Builder().addInterceptor(interceptor).build()


    init {
        //TODO must be None at live
        interceptor.level = HttpLoggingInterceptor.Level.BODY
    }


    val retrofit = Retrofit.Builder()
        .baseUrl("http://c6913be7.ngrok.io/energy/api/")
        .addConverterFactory(GsonConverterFactory.create())
        .client(client)
        .build()

    val service = retrofit.create(Api::class.java)

}

Любые советы о том, как получить доступ к данным а затем, как передать их в макет массива таблицы?

Ответы [ 3 ]

1 голос
/ 26 февраля 2020

@ ZookKep - response.body () вернет список объектов. Вы можете напрямую использовать это. Не нужно никаких других логи c.

Я имею в виду, не вызывайте .toString () для response.body ().

Вы можете проверить с журналом, как следует

val listOfModels = response.body()

if (listOfModels != null) {
    for ((index, model) in listOfModels.withIndex()) {
        Log.d("----", "----")
        Log.d("INDEX $index", "ActualTotalLoadByMonthValue ${model.actualTotalLoadByMonthValue}")
        Log.d("INDEX $index", "AreaName ${model.areaName}")
        Log.d("INDEX $index", "AreaTypeCode ${model.areaTypeCode}")
        Log.d("INDEX $index", "Dataset ${model.dataset}")
        Log.d("INDEX $index", "MapCode ${model.mapCode}")
        Log.d("INDEX $index", "Month ${model.month}")
        Log.d("INDEX $index", "ResolutionCode ${model.resolutionCode}")
        Log.d("INDEX $index", "Source ${model.source}")
        Log.d("INDEX $index", "Year ${model.year}")
        Log.d("----", "----")
       }
}

Тем не менее у вас есть сомнения по этому поводу, пожалуйста, дайте мне знать в разделе комментариев. Я с радостью помогу :)

0 голосов
/ 26 февраля 2020

// если вы хотите напечатать целую JSON в консоли импорта gson, здесь: реализация 'com.google.code.gson: gson: 2.8.6'

if (response.isSuccessful) {

     foreach(Response model:Response1){
     Log.e("value",model.getYourMethod());
     }
}
0 голосов
/ 26 февраля 2020

Попробуйте это.

try {
    // jsonString is a string variable that holds the JSON 
    JSONArray itemArray = new JSONArray(jsonString);
    for (int i = 0; i < itemArray.length(); i++) {
        int value=itemArray.getInt(i);
        Log.e("json","json array value for " +  i + " = " + value);
    }
} catch (JSONException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

Дайте мне знать, если у вас есть путаница.

...