首页 > 解决方案 > 如何从观察发布者中设置不同的字段?

问题描述

在观察为某些表格中的图片设置 Id 的上传功能时,我需要为这些 IdprofilePictreIdwallpaperPictureId属性设置这些 Id。我没有找到任何解决方案,而 flatMap 或其他功能太难理解了。我可以获得下面提到的 id,但我需要将它们分开,以便我可以将它们放在不同的字段中。要么给我一个解决方案,要么给我一个好的文件。不用担心代码中的其他功能我在订阅时只需要Rx的分离功能。谢谢你

更多说明: 上传后我需要设置两个属性,但我只应该在订阅方法中进行onSuccessUpload。我尝试了很多方法,但我将两个 ID 都设置为profilePictureIdwallpaperPictureId这是他们应该分开的问题。

s1 变量的响应:

E/PictureIds@@@>>>: [4e6a3956bf8743b78fe4ffa546f627f0.png]
E/Utils: {"attachments":"4e6a3956bf8743b78fe4ffa546f627f0.png","status":"SUCCESS","message":"-"}

E/PictureIds@@@>>>: [7712b7f081d045e8b94f077e40994290.png]
E/Utils: {"attachments":"7712b7f081d045e8b94f077e40994290.png","status":"SUCCESS","message":"-"}

private Disposable picture; // this varaibale is set in onSuccessUpload to subscribe 

private void onSuccessUpload(){
setPicture(RxBus.sendResponseUploadLink()
                .subscribe(s1 -> {
                    String[] id = new String[]{s1.getString("attachments")};
                    Timber.tag("PictureIds@@@>>>").e(Arrays.toString(id));
                    setProfilePictureId(id[0]);  // problem is here
                    setWallpaperPictureId(id[1]); // problem is here
                }));
}

private void uploadPicture(String path){
        Upload uploadPicture = new Upload();
        uploadPicture.upload(getToken(), path);
    }

@Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.channel_profile_image:
                selectProfileImage();
                break;
            case R.id.channel_cover_image:
                selectCoverImage();
                break;
            case R.id.submit_social_channel:
                onSuccessUpload();
                uploadPicture(getProfileFilePath());
                uploadPicture(getWallpaperFilePath());
                

        }
    }

标签: androidrx-java

解决方案


subscribe 函数返回一个 Subscription 对象,它允许您管理 observable 和订阅者之间创建的关系。

您只有一个订阅者,所以您能做的最好的事情就是添加imageType您的 API 响应,例如,

    {
       "attachments":"4e6a3956bf8743b78fe4ffa546f627f0.png",
       "imageType":"Wallpaper"
       "status":"SUCCESS",
       "message":"-"
    }

因此,在订阅者中,您可以区分上传的图像并相应地调用不同的函数。


推荐阅读