当前位置: 首页 > 知识库问答 >
问题:

想要返回值并处理订单有问题

柯曜文
2023-03-14

我需要从类B中的方法C返回一个值。

我希望我的代码像这样处理:1 - 2 - 3 - 4 - 5

但它的处理方式是:1-4-5-2-3

(如您所见,我在代码中添加了一些日志。)

我已经处理这个问题一个多星期了,但我找不到问题。

我在这个问题中删除了一些无用的代码。

问题是什么?我如何解决这个问题?

我重写了这篇文章,因为有人说我把代码缩短得太多了。

希望足够了!

提前谢谢你!

Class A
public class a() {
    public void checkConnectivity(Context context) {
         this.context = context;
         myObservable.subscribe(mySubscriber);
    }

    private Observable<Integer> myObservable = Observable.create(
        new Observable.OnSubscribe<Integer>() {
            @Override
            public void call(Subscriber<? super Integer> sub) {
                Log.d("1", "1");
                int connType = cc.getConnectionStatus(context);
                sub.onNext(connType);
                sub.onCompleted();
            }
        }
    );

    private Subscriber<Integer> mySubscriber = new Subscriber<Integer>() {
        @Override
        public void onNext(Integer connType) {
            int code = c.getcode();
            Log.d("4", "4");
            textView.setText("code : " + code);
        }

        @Override
        public void onCompleted() {
            Log.d("5", "5");
        }

        @Override
        public void onError(Throwable e) {
            Log.d("-- NetPresenter", "onError");
        }
    };
}

Class C
public class C() {
    public int getcode() {
         observable
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<Response<ResponseBody>>() {
                public void onCompleted() {
                    Log.d("3", "3");
                }

                public void onError(Throwable e) {
                    code = 0;
                }

                public void onNext(Response<ResponseBody> response) {
                    code = 1;
                    Log.d("2", "2");
                }
            });
        return code;
    }
}

共有1个答案

陆飞鸿
2023-03-14

首先,如果没有其他指定,RxJava在默认情况下是同步的。这两条线

.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())

使您的c.getcode()调用异步。如果你去掉这些线,你就会得到你所需要的。我自己检查过了。

P、 请注意,文本视图。setText(“代码:”代码) 可能引发异常(如果您不是从UI线程启动整个链)。因此,您需要找到在UI线程中运行此代码的变通方法(带有Looper.getMainLooper()的处理程序可能会有所帮助)。

Upd 1。尝试postById。execute()在同一线程中运行请求。只有在同一线程中进行所有调用,才能实现目标<代码>postById。排队初始化异步调用。所以你又把它弄坏了。

 类似资料:
  • 问题内容: 我正在使用具有以下签名的类: 我正试图通过其他班级来称呼它: 但是在这里我得到这个错误: 为什么在Class扩展行中将我指定为第三个参数? 问题答案: 您可以通过对返回的AsyncTask调用AsyhncTask的get()方法来获得结果,但是当它等待获取结果时,它将把它从异步任务变成同步任务。 由于您的AsyncTask位于单独的类中,因此您可以创建一个接口类并在AsyncTask中

  • 1.API 返回结构 返回结果(response)分为:状态码(status code)、头部(headers)、消息体(body)。其中算法的结果会以 JSON 格式放在消息体中。 如何从 HTTP 返回中分别获取这三部分信息,请参见所用 HTTP 库的文档。 解析 JSON 格式需要寻找所用语言的 JSON 库,参见 http://www.json.org/ 2.正常结果 状态码为 2xx的为

  • 问题内容: 因此,我编写了一个小脚本来从网站下载图片。它通过7个字母字符值,其中第一个字符始终是数字。问题是,如果我想停止脚本并再次启动它,则必须重新开始。 我可以用我获得的最后一个值以某种方式播种itertools.product,这样我就不必再遍历它们。 感谢您的任何投入。 这是代码的一部分: 问题答案: 这是一个基于pypy库代码的解决方案(感谢agf在评论中的建议)。 状态可以通过属性获得

  • 本文向大家介绍python 处理telnet返回的More,以及get想要的那个参数方法,包括了python 处理telnet返回的More,以及get想要的那个参数方法的使用技巧和注意事项,需要的朋友参考一下 问题: 需要循环获取网元返回的某个参数,并计算出平均值。 解决方案: 通过expect解决返回More的问题。 通过具体的参数位置,精确获取到参数。 讨论: 参数位置固定,不好复用。 以上

  • 问题内容: 我在Utilities类中使用loadImage方法,并且在通过闭包返回图像时遇到了一些麻烦。基本上因为我的代码可能返回图像或错误,所以在调用该方法时将其分配给image属性是行不通的。 我在类的方法声明中使用的方法是否错误,还是应该以不同的方式调用该方法以预期潜在的不同结果?谢谢 问题答案: 将处理程序添加到您的 loadImage 函数中: 迅捷3 像这样调用func: 斯威夫特2

  • Android Kotlin,<代码>api。openOrder返回类型为BaseResponse 我想要的代码是,如果配置文件。值不为null,API返回BaseResponse 但android studio提示,这种有趣的返回类型是任何,如何修复? 排除if-else用法,因为配置文件。值具有许多属性,并且具有配置文件。价值用户名,