如何使用 Retrofit 和 RxJa 处理两个 JSON 响应?

Zoo*_*key 2 android rx-java rx-android retrofit2

我正在向服务器发送 API 请求,我可以得到两个 JSON 响应:

  • 经过身份验证的用户的 JSON 响应
  • 未经身份验证的用户的 JSON 响应

经过身份验证的用户响应:

{"status":"ok","tekst":"8bc6c9cf-293f-11e5-9940-448a5b5dd2bd","requestID":9034}
Run Code Online (Sandbox Code Playgroud)

未经身份验证的用户响应:

{"authenticationError":"User authentication failed"}
Run Code Online (Sandbox Code Playgroud)

改造服务:

public interface LiveService {
    @GET("live.php")
    Observable<Response<LiveResponse>> getLive();
}
Run Code Online (Sandbox Code Playgroud)

这是对服务器的改造请求:

retrofit.create(LiveService.class)
            .getLive()
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Subscriber<Response<LiveResponse>>() {
                @Override
                public void onCompleted() {

                }

                @Override
                public void onError(Throwable e) {
                    liveView.onLiveError(e);
                }

                @Override
                public void onNext(Response<LiveResponse> response) {


                }
            });
Run Code Online (Sandbox Code Playgroud)

我如何处理 onNext 中的响应以检查我是否收到了经过身份验证的用户或未经身份验证的用户的 JSON 响应?

Sta*_*nd0 5

您的模型需要将两者的所有字段合并为一个 POJO。就这么简单:-)

不存在的经过身份验证的用户/未经身份验证的用户的用户名将为空。

为了更清楚...

让我们采取两个不同的答复。这是我遇到的两个随机 JSON 有效负载。

   {
        "title": "Sample Konfabulator Widget",
        "name": "main_window",
        "width": 500,
        "height": 500
    }



   { 
        "src": "Images/Sun.png",
        "name": "sun1",
        "hOffset": 250,
        "vOffset": 250,
        "alignment": "center"
    }
Run Code Online (Sandbox Code Playgroud)

引导我们到一个组合对象,如

    {
    "title": "Sample Konfabulator Widget",
    "name": "main_window",
    "width": 500,
    "height": 500,
    "src": "ImagesSun.png",
    "hOffset": 250,
    "vOffset": 250,
    "alignment": "center"
   }
Run Code Online (Sandbox Code Playgroud)

给我们一个看起来像这样的 POJO。

public class MyPojo
{
    private String alignment;

    private String title;

    private String hOffset;

    private String height;

    private String width;

    private String name;

    private String src;

    private String vOffset;

    public String getAlignment ()
    {
        return alignment;
    }

    public void setAlignment (String alignment)
    {
        this.alignment = alignment;
    }

    public String getTitle ()
    {
        return title;
    }

    public void setTitle (String title)
    {
        this.title = title;
    }

    public String getHOffset ()
    {
        return hOffset;
    }

    public void setHOffset (String hOffset)
    {
        this.hOffset = hOffset;
    }

    public String getHeight ()
    {
        return height;
    }

    public void setHeight (String height)
    {
        this.height = height;
    }

    public String getWidth ()
    {
        return width;
    }

    public void setWidth (String width)
    {
        this.width = width;
    }

    public String getName ()
    {
        return name;
    }

    public void setName (String name)
    {
        this.name = name;
    }

    public String getSrc ()
    {
        return src;
    }

    public void setSrc (String src)
    {
        this.src = src;
    }

    public String getVOffset ()
    {
        return vOffset;
    }

    public void setVOffset (String vOffset)
    {
        this.vOffset = vOffset;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [alignment = "+alignment+", title = "+title+", hOffset = "+hOffset+", height = "+height+", width = "+width+", name = "+name+", src = "+src+", vOffset = "+vOffset+"]";
    }
}
Run Code Online (Sandbox Code Playgroud)