簡體   English   中英

使用 Android Studio 進行 Retrofit2:無法獲得一系列加油站

[英]Retrofit2 with Android Studio: Cant get the array of petrol-stations

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
    }
  ]
}

主活動.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 循環進行迭代以顯示加油站數組。 我不知道為什么。 誰能幫我這個?

我克隆了你的代碼並運行了。 錯誤在於您的回復。

Antwort.stationslist.size = 0

這就是為什么不通過 for 循環進行迭代以顯示加油站數組的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM