Okhttp3替代HttpURLConnection优势

突发想到,自己之前的毕业设计中,用到的是HttpURLConnection进行的联网,当时也是一知半解照着教科书上的流程进行联网并通过get方式获取数据,代码量十分繁重。
在原来的HttpURLConnection基础上,进行一次联网登陆的流程大致分为:
1.获得EsitText上的数据,账号密码,通过一个LoginService方法

public static String loginByGet(String username,String password){
        try{
            String visit ="http://api.13550101.com/login/token?username="
                    + URLEncoder.encode(username,"UTF-8")
                    +"&password="
                    +URLEncoder.encode(password,"UTF-8");
            URL url = new URL(visit);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(5000);
            conn.setRequestMethod("GET");
            int code=conn.getResponseCode();
            if(code==200){
                InputStream is = conn.getInputStream();
                String text = StreamTools.readInputStream(is);
                return text;
            }else{
                return null;
            }
        }catch (Exception e){
            e.printStackTrace();
        }
     return null;
    }
```来进行网络请求。
尤其注意其中的StreamTools又是一个工具类,用来对服务器返回的输入流进行获取。





<div class="se-preview-section-delimiter"></div>

public static String readInputStream(InputStream is){
try{
ByteArrayOutputStream baos=new ByteArrayOutputStream();
int len=0;
byte[] buffer = new byte[1024];
while((len=is.read(buffer))!=-1){
baos.write(buffer,0,len);
}
is.close();
baos.close();
byte[] result = baos.toByteArray();
String temp = new String(result);

        return temp;
    }catch (Exception e){
        e.printStackTrace();
        return "获取失败";
    }
}

“`

public static  String readInputStream(InputStream is){
        try{
            ByteArrayOutputStream baos=new ByteArrayOutputStream();
            int len=0;
            byte[] buffer = new byte[1024];
            while((len=is.read(buffer))!=-1){
                baos.write(buffer,0,len);
            }
            is.close();
            baos.close();
            byte[] result = baos.toByteArray();
            String temp = new String(result);

            return temp;
        }catch (Exception e){
            e.printStackTrace();
            return "获取失败";
        }
    }

的这是对输入流的获取的一个方法。接下来,再判断String xxx = 两个方法结合 的数据是否为空,不为空再try catch块对数据进行Json解析这就是一个全部的过程。

现在开始okhttp3的过程

一直在用okhttp3联网,但是今天想用okhttp3来代替之前的HttpURLConnection联网方式。
首先,如果是get方式联网则是默认,
首先基础的是声明OkhttpClient 的对象,然后Request一个url,然后通过Response获得数据,## 重点来了 ##如果服务器返回的是Json数据,在这里String a = response.body().toString();返回的数据是错误的,想要获得Json数据,需要把toString 变成string()即可。
下面的代码则是全过程,会发现,代码比HttpURLConnection精简的多。而且这些行代码还包括了解析json数据在内。

private void getInfo() {
new Thread(new Runnable() {
@Override
public void run() {
try {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url("http://api.13550101.com/login/token?username=" +
"xxxxx" + "&xxxx").build();
Response response = client.newCall(request).execute();
if (response != null) {
String aaa = response.body().string();
getShow(aaa);
try {
JSONTokener jsontokener = new JSONTokener(aaa);
JSONObject jsob = (JSONObject) jsontokener.nextValue();
if(jsob.getInt("error")==1){
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "error为0", Toast.LENGTH_SHORT).show();
}
});
}
} catch (JSONException e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}

到这里代码就都结束了。特意记下来表达对Okhttp3的敬畏之情,当然记得联网声明权限呦。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值