首页 > 解决方案 > 如何从受人尊敬的线程之外取消改造调用?

问题描述

我正在创建这样一个线程上的改造问题:

new Thread(new Runnable() {
                @Override
                public void run() {
                    mService.uploadFile(body)
                            .enqueue(new Callback<String>() {
                                @Override
                                public void onResponse(final Call<String> call, Response<String> response) {

                                    progressDialog.dismiss();
                                    Toast.makeText(MainActivity.this, "uploaded!", Toast.LENGTH_SHORT).show();

                                }

                                @Override
                                public void onFailure(Call<String> call, Throwable t) {
                                    Toast.makeText(MainActivity.this, t.getMessage(), Toast.LENGTH_SHORT).show();
                                }
                            });
                }
            }).start();

我需要从外部通过 a取消call输入。这怎么可能?onResponseThreadprogressDialog.setButton()

任何帮助表示赞赏!

标签: javaandroidretrofit2progressdialogrequest-cancelling

解决方案


您需要获取mService.uploadFile(body). 这是retrofit2.Call<T>与公共方法的接口cancel()

   ...{
    call = mService.uploadFile(body)
    call.enqueue(new Callback<String>() {
   ...

并像这样使用它

  void cancel() {
        if (!call.isCanceled && call.isExecuted) call.cancel()
    }

也方法enqueue(Callback<T> callback)

异步发送请求并通知其响应的回调,或者在与服务器交谈、创建请求或处理响应时发生错误。

你不需要Thread()用它来处理它。


推荐阅读