Android学习笔记(十)--OKHttp持久化cookies实现模拟登陆

最近打算写一个实现登陆学校的网站,实现查询成绩选课等等功能的app。于是就要用到OKHttp持久化cookie的相关知识,没有使用retrofit,所以打算认真写一篇博客来和大家分享一下我的学习心得。
GITHUB的地址是:https://github.com/CallMeSp/University_in_Hand.git
添加依赖什么的就不多说了,直接进入正文吧。
学校教务处的网站是:http://202.119.225.34/default2.aspx
我们会发现是带验证码的登陆,所以就不是简单的填表单然后post就可以的了,首先要获取这张验证码的图片,让它在我们的界面中显示出来。先来看一下效果吧:
这里写图片描述

在教务处网站查看源代码即可知道验证码的地址为:http://202.119.225.34/CheckCode.aspx
接下来我们要做的事情就是用okhttp把它缓存下来,换成成bitmap格式,然后在ImageView中显示出来即可。思路清晰后就开始行动。
1.定义Request:

Request request=new Request.Builder()
                           .url("http://202.119.225.34/CheckCode.aspx")
                           .build();

这里说句题外话,我个人还是非常喜欢这种流式的方法定义形式的,所以以后如果自己写一些工具库也会尽量用这种方式,看起来结构清晰容易阅读。
2.定义CLient:

OkHttpClient myclient=new OkHttpClient.Builder()
                                      .build();

3.用刚刚定义的CLient来发送刚刚定义的Request请求:

myclient.newCall(request).enqueue(new okhttp3.Callback() {
                            @Override
                            public void onFailure(okhttp3.Call call, IOException e) {
                            }
                            @Override
                            public void onResponse(okhttp3.Call call, okhttp3.Response response) throws IOException {
                                InputStream is = response.body().byteStream();
                                final Bitmap bm = BitmapFactory.decodeStream(is);
                                runOnUiThread(new Runnable() {
                                    @Override
                                    public void run() {
                                        Img_check.setImageBitmap(bm);
                                    }
                                });
                            }
                        });

这里代码也很清晰,我们只是一个简单的测试,所以也不用去管onFailure里面的内容,直接空着就可以了。在onResponse中将返回的response转换成InputStream字节流,然后用bitmap读取就可以了。

InputStream is = response.body().byteStream();
final Bitmap bm = BitmapFactory.decodeStream(is);

另外一个要注意的细节就是更改UI要在主线程中实现:

runOnUiThread(new Runnable() {
                                    @Override
                                    public void run() {
                                        Img_check.setImageBitmap(bm);
                                    }
                                });
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值