Как я могу использовать модификацию и RxJava с несколькими классами pojo? - PullRequest
0 голосов
/ 02 июля 2019

Я разрабатываю приложение для Android на Android Studio. Я использую Java.

Я хочу использовать этот API из фактов открытых продуктов: https://fr.openfoodfacts.org/api/v0/produit/3029330003533.json

Но я знаю, как использовать модернизацию и Rxjava только с одним классом pojo.

Я использую этот сайт для создания pojo classe: http://pojo.sodhanalibrary.com Но он создает множество классов pojo, и я не знаю, правильно ли это и как я могу его использовать?

Далее вы можете видеть, что у меня есть загрузки класса POJO.

POJO класс

1 Ответ

2 голосов
/ 02 июля 2019

Используйте JsonSchema для генерации pojo для используемой вами библиотеки синтаксического анализа (GSON / Jackson и т. Д.) И для вызова API пользователем RxJava. и модернизировать, как это

Создание Pojo


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

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.foodit.data.remote.wrapper.SignupDetailsWrapper;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
        "code",
        "msg",
        "details"
})
public class LoginResponse {

    @JsonProperty("code")
    private int code;
    @JsonProperty("msg")
    private String msg;
    @JsonProperty("details")
    private List<LoginDetailsWrapper> details = new ArrayList<LoginDetailsWrapper>();

    @JsonProperty("code")
    public int getCode() {
        return code;
    }

    @JsonProperty("code")
    public void setCode(int code) {
        this.code = code;
    }

    @JsonProperty("msg")
    public String getMsg() {
        return msg;
    }

    @JsonProperty("msg")
    public void setMsg(String msg) {
        this.msg = msg;
    }

    @JsonProperty("details")
    public List<LoginDetailsWrapper> getDetails() {
        return details;
    }

    @JsonProperty("details")
    public void setDetails(List<LoginDetailsWrapper> details) {
        this.details = details;
    }

}

Определите Api в ApiInterface следующим образом

 @FormUrlEncoded
    @POST("login")
    Observable<LoginResponse> userLogin(@Field("device_id") String device_id, @Field("device_type") String device_type,
                                        @Field("username") String username, @Field("password") String password
    );

и вызовите api следующим образом


    @Override
    public void userLogin(String device_id, String device_type, String username, String password) {
        getCompositeDisposable().add(loginActivtiyInteractor.userLogin(device_id, device_type, username, password)
                .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                .subscribe(loginResponse -> {
                    if (loginResponse != null) {
                        if (loginResponse.getCode() == 1) {
                            getMvpView().hideLoading();
                            getMvpView().updateView(loginResponse);
                        } else {
                            getMvpView().hideLoading();
                            getMvpView().onError(loginResponse.getMsg());
                        }
                    }
                }, throwable -> {
                    throwable.printStackTrace();
                    getMvpView().onError(throwable.getLocalizedMessage());
                    getMvpView().hideLoading();
                }));
    }

Надеюсь, это поможет.

...