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的敬畏之情,当然记得联网声明权限呦。
- Okhttp3替代HttpURLConnection优势
- okhttp3替代FormEncodingBuilder的方法
- httpclient httpurlconnection okhttp3 okhttputil okgo [记录]
- 农村广播不可替代的优势
- HttpURLConnection替代apache httpclient上传文件
- xamarin学习笔记A15(安卓OkHttp3和HttpURLConnection) 上
- xamarin学习笔记A16(安卓OkHttp3和HttpURLConnection)下
- OkHttp3
- OkHttp3
- OkHttp3
- OkHttp3
- OkHttp3
- Okhttp3
- okHttp3
- OkHttp3
- S3C2416开发板 ARM9EJ内核 完美替代2440 的优势
- 优势
- HttpURLConnection
- 使用最火技术打造真实App
- HDU3193-Find the hotel
- as内存泄漏工具 leak canary的使用
- Logback日志工具使用详解
- PHP初识(一)
- Okhttp3替代HttpURLConnection优势
- Android解决:View.setTag(key,object)异常:The key must be an application-specific resource id.
- rn代码自动提示
- 单引号和双引号
- PHPExcel导出的问题,在PHP7中
- 进制转换
- 文件下载 - JAVA原生
- zookeeper原理(转)
- AngularJS 中利用 Interceptors 来统一处理 HTTP 的错误