Okhttp3替代HttpURLConnection优势

来源:互联网 发布:茗伊 buff数据 编辑:程序博客网 时间:2024/04/30 06:18

突发想到,自己之前的毕业设计中,用到的是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的敬畏之情,当然记得联网声明权限呦。

0 0
原创粉丝点击