解决使用AsyncHttpClient返回数据出现onsuccess总是在返回方法结束后才执行问题

话不多说直接上有问题的代码

    public static String getlogin(String url)throws Exception {
    client = new AsyncHttpClient();

    client.get(url, new TextHttpResponseHandler() {
        @Override
        public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {

        }

        @Override
        public void onSuccess(int statusCode, Header[] headers, String responseString) {
            result=responseString;
        }

    });
    return result;
}

这个get方法本身没有问题,但是当他放置到一个带有返回值的方法中,并且这个返回值是通过onsuccess回调方法设置的,这就有问题了。onsuccess可以直接进行ui修改,也就是说onsuccess是在ui线程上的,最终会导致result总是先返回了了,才会执行onsuccess设置result,当你带有数据的时候,会出现第一次访问什么数据都没有,而第二次访问获得的结果是第一次的结果,第三次是第二次的,以此类推。那么我们如何解决呢?

问题就是 return result跟result=responseString方法先后执行的顺序问题,这个时候有没有一种方法可以避免出现这种顺序问题,有的,不让这个方法有返回值不就行了么!

使用自定义回调接口实现回调可以完全避免这个问题
如果对回调不熟悉的可以看以下这篇博客
回调详解
首先定义一个回调接口

public interface CallBack {
    public void solve(String result);
}

然后在你需要调用上面那个方法的activity中实现这个接口,这个solve里填写你的一系列操作,我只列出跟问题相关的代码

public class LoginActivity extends BaseActivity implements CallBack {  
@Override
    public void solve(String result) {
      
        }
    }
}

最后就是最开始那个方法的变化了

 public static void getlogin(String url, final CallBack callBack)throws Exception {
        client = new AsyncHttpClient();

        client.get(url, new TextHttpResponseHandler() {
            @Override
            public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {

            }

            @Override
            public void onSuccess(int statusCode, Header[] headers, String responseString) {
                result=responseString;
                callBack.solve(result);
            }
        });
    }

整个流程的执行顺序就是执行getlogin()->onSuccess()->solve(),当onsuccess执行后会回到activity中的solve,solve中的参数就是原先你想要返回的数据,这样不是通过方法return返回数据,而是通过接口回调返回数据,效果等于变相的把return result 放到了onsuccess里。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值