Как настроить проект для этого именно Json? - PullRequest
0 голосов
/ 05 мая 2019

У меня проблема с Json

, когда я использую Gson, все работает правильно, но когда я использую retrofit2, что-то идет не так.

Структура класса точно такая же между модернизацией и gson.Разница заключается в одном дополнительном интерфейсе и кодах модификации, которые работают в разных случаях. Я загрузил здесь каждый фрагмент кода.

String json2 = "{\"busList\":{\"bus\":[{\"forward\":\"true\",\"lat\": \"41.718979\",\"lon\": \"44.770645\",\"nextStopId\": \"1858\",\"routeNumber\": \"42\"},{\"forward\": \"true\",\"lat\": \"41.71735\",\"lon\": \"44.777855\",\"nextStopId\": \"924\",\"routeNumber\": \"42\" }]}}";
//project structure 
//Class1
public class FatherBusList {
    @SerializedName("busList")
    private BusList busList;

    public FatherBusList(BusList busList){
        this.busList = busList;
    }

    public BusList getBusList() {
        return busList;
    }
}

//Class2
public class BusList {
    @SerializedName("bus")
    private List<Bus> buses;

    public BusList (List<Bus> busses){
        this.buses = busses;
    }

    public List<Bus> getBuses() {
        return buses;
    }
}

//Class3
public class Bus {

    private String forward;
    private String lat;
    private String lon;
    private String nextStopId;
    private String routeNumber;

    public Bus(String forward, String lat, String lon, String nextStopId, String routeNumber) {
        this.forward = forward;
        this.lat = lat;
        this.lon = lon;
        this.nextStopId = nextStopId;
        this.routeNumber = routeNumber;
    }

    public String getForward() {
        return forward;
    }

    public String getLat() {
        return lat;
    }

    public String getLon() {
        return lon;
    }

    public String getNextStopId() {
        return nextStopId;
    }

    public String getRouteNumber() {
        return routeNumber;
    }
}
//retrofit2 code
//Interface for request
public interface TtcApi {

    @GET("buses?routeNumber=37&forward=1&_dc=1556996108032")
    Call<FatherBusList> getBus();
}

//MainActivivty
public class MainActivity extends AppCompatActivity {
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.textView);

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://transit.ttc.com.ge/pts-portal-services/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        TtcApi ttcApi = retrofit.create(TtcApi.class);

        Call<FatherBusList> call = ttcApi.getBus();

        call.enqueue(new Callback<FatherBusList>() {
            @Override
            public void onResponse(Call<FatherBusList> call, Response<FatherBusList> response) {
                if (!response.isSuccessful()) {
                    textView.setText("Code: " + response.code());
                    return;
                }

                Toast.makeText(MainActivity.this, "Successful", Toast.LENGTH_SHORT).show();
            }

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


    }
}

Я ожидаю, что busList имеет 1 объект, а этот объект имеет arrayList

Но его вывод равен нулю.

1 Ответ

0 голосов
/ 05 мая 2019
{
    "bus": [
        {
            "forward": "true",
            "lat": "41.690926",
            "lon": "44.816879",
            "nextStopId": "1012",
            "routeNumber": "37"
        }
    ]
}

Я запрашиваю ваш интерфейс, верните его.

Вам нужно напрямую использовать объект класса ' BusList ', не используйте "FatherBusList"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...