开发者社区> 问答> 正文

Android Studio的Retrofit2:无法获得加油站阵列

api回应:

{
  "ok": true,
  "license": "CC BY 4.0 -  https:\/\/creativecommons.tankerkoenig.de",
  "data": "MTS-K",
  "status": "ok",
  "stations": [
    {
      "id": "35885891-164a-4cc7-a6c9-3c6f7f4e6845",
      "name": "Andreas Linke",
      "brand": "Nordoel",
      "street": "Peiner Str.",
      "place": "Sehnde",
      "lat": 52.31519,
      "lng": 9.972986,
      "dist": 2.3,
      "diesel": 1.109,
      "e5": 1.279,
      "e10": 1.239,
      "isOpen": true,
      "houseNumber": "52",
      "postCode": 31319
    },
    {
      "id": "d4cb468e-86b0-4aa0-a862-5677d22cbab1",
      "name": "ACCESS Tankstelle Sehnde",
      "brand": "Access",
      "street": "LEHRTER STR. 20",
      "place": "SEHNDE",
      "lat": 52.317781,
      "lng": 9.966101,
      "dist": 2.8,
      "diesel": 1.109,
      "e5": 1.279,
      "e10": 1.249,
      "isOpen": true,
      "houseNumber": "",
      "postCode": 31319
    },
    {
      "id": "5bf0bee3-4dc0-4f6e-a846-cb0ac3ac2efc",
      "name": "Aral Tankstelle",
      "brand": "ARAL",
      "street": "Iltener Straße",
      "place": "Sehnde",
      "lat": 52.3173637,
      "lng": 9.959905,
      "dist": 3.2,
      "diesel": 1.139,
      "e5": 1.319,
      "e10": 1.289,
      "isOpen": true,
      "houseNumber": "8",
      "postCode": 31319
    },
    {
      "id": "096ac8b7-190d-4def-a860-6d2002f4b84e",
      "name": "M1 Lehrte",
      "brand": "M1",
      "street": "Everner Str.",
      "place": "Lehrte",
      "lat": 52.36773,
      "lng": 9.9967,
      "dist": 5.6,
      "diesel": 1.109,
      "e5": null,
      "e10": null,
      "isOpen": true,
      "houseNumber": "41",
      "postCode": 31275
    },
    {
      "id": "e1a15081-25ed-9107-e040-0b0a3dfe563c",
      "name": "Sehnde, Kirchstr. 17",
      "brand": "HEM",
      "street": "Kirchstr.",
      "place": "Sehnde",
      "lat": 52.34744,
      "lng": 9.928732,
      "dist": 6.2,
      "diesel": 1.109,
      "e5": 1.269,
      "e10": null,
      "isOpen": true,
      "houseNumber": "17",
      "postCode": 31319
    },
    {
      "id": "375a1dbb-4d61-4a4b-825a-3b2e3c0b82d8",
      "name": "Lehrte , Ahltener Straße 15",
      "brand": "bft",
      "street": "Ahltener Straße 15",
      "place": "Lehrte",
      "lat": 52.372474,
      "lng": 9.97253,
      "dist": 6.5,
      "diesel": 1.109,
      "e5": 1.309,
      "e10": 1.279,
      "isOpen": true,
      "houseNumber": "",
      "postCode": 31275
    },
    {
      "id": "45b00a42-93fa-41fe-9f9b-977b25a9832f",
      "name": "OIL! Tankstelle Lehrte",
      "brand": "OIL!",
      "street": "Mielestr. 20",
      "place": "Lehrte",
      "lat": 52.3804,
      "lng": 10.0061,
      "dist": 6.9,
      "diesel": 1.109,
      "e5": 1.279,
      "e10": 1.249,
      "isOpen": true,
      "houseNumber": "",
      "postCode": 31275
    }
  ]
}

MainActivity.java:

package com.example.benzinpreise;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonIOException;
import com.google.gson.JsonObject;

import java.util.ArrayList;
import java.util.List;

import javax.xml.transform.Result;

import retrofit2.*;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class MainActivity extends AppCompatActivity {
    private TextView textViewResult;
    private List<Tankstellen> tankstellenList = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textViewResult =findViewById(R.id.text_view_result);
        getTankstellen();

    }

    private void getTankstellen(){
        Gson gson = new GsonBuilder()
                .setLenient()
                .create();

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(TankstellenApi.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build();

        TankstellenApi tankstellenApi = retrofit.create(TankstellenApi.class);
        Call<Tankstellen> call = tankstellenApi.getTankstellen("57.001","10.007","7","all","dist",TankstellenApi.API_KEY);
        call.enqueue(new Callback<Tankstellen>() {
            @Override
            public void onResponse(Call<Tankstellen> call, Response<Tankstellen> response) {

                    String displayResponse = "";
                    String displayStations ="";
                    Tankstellen antwort = response.body();
                    List<Tankstellen.Stations> tankstellenList = antwort.stationsList;

                    displayResponse += "ok: " +antwort.isOk() +"\n" + "license: "+antwort.getLicense() +"\n"+ "data: "+antwort.getData() +"\n"+ "status: "+antwort.getStatus() +"\n";

                    for(Tankstellen.Stations stationen : tankstellenList){
                        displayResponse += stationen.id + " "
                                + stationen.name + " "
                                + stationen.brand + " "
                                + stationen.street + " "
                                + stationen.place + " "
                                + stationen.lat + " "
                                + stationen.lng + " "
                                + stationen.dist + " "
                                + stationen.diesel + " "
                                + stationen.e5 + " "
                                + stationen.e10 + " "
                                + stationen.isOpen + " "
                                + stationen.houseNumber + " "
                                + stationen.postCode;
                    }
                    textViewResult.setText(displayResponse);


            }

            @Override
            public void onFailure(Call<Tankstellen> call, Throwable t) {
                textViewResult.setText(t.getMessage());
            }
        });
    }

}

Tanktstellen.java

package com.example.benzinpreise;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

import java.util.ArrayList;
import java.util.List;

public class Tankstellen {

    private boolean ok;
    private String license;
    private String data;
    private String status;
    @SerializedName("stations")
    public List <Stations> stationsList = null;

    public class Stations{
        @SerializedName("id")
        public String id;
        public String name;
        public String brand;
        public String street;
        public String place;
        public double lat;
        public double lng;
        public double dist;
        public double diesel;
        public double e5;
        public double e10;
        public boolean isOpen;
        public String houseNumber;
        public int postCode;


    }


    public boolean isOk() {
        return ok;
    }

    public String getLicense() {
        return license;
    }

    public String getData() {
        return data;
    }

    public String getStatus() {
        return status;
    }

}

TankstellenAPI.java:

package com.example.benzinpreise;

import com.google.gson.JsonObject;

import java.util.List;

import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;

public interface TankstellenApi {

    String BASE_URL = "https://creativecommons.tankerkoenig.de/";
    String API_KEY = "50d25698-e799-22df-c47c-833b7ae62b8b";

    @GET("json/list.php")
    Call<Tankstellen> getTankstellen (@Query("lat") String lat,
                                     @Query("lng") String lng,
                                     @Query("rad") String umkreis,
                                     @Query("type") String type,
                                     @Query("sort") String filter,
                                     @Query("apikey") String apikey);

}

在代码中有一些德国关键词只适合我,这样我可以更好地理解代码。希望不要混淆。

我的问题:我只会

ok: true
license: CC BY 4.0 -  https:\/\/creativecommons.tankerkoenig.de
data: MTS-K
status: ok

该数组未通过for循环进行迭代以显示加油站的数组。我不知道为什么 谁能帮我这个?

问题来源:Stack Overflow

展开
收起
montos 2020-03-22 10:35:08 877 0
1 条回答
写回答
取消 提交回答
  • 我克隆了您的代码,然后运行。错误在于您的回复。

    Antwort.stationslist.size = 0
    

    这就是为什么它不通过for循环来显示加油站阵列的原因。

    回答来源:Stack Overflow

    2020-03-22 10:39:28
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载