Android 开发之访问网络
来源:互联网 发布:淘宝代购only是正品吗 编辑:程序博客网 时间:2024/05/22 04:33
现在访问网络有好多非常优秀的框架,比如 OKHTTP,Volley 等等,但是最基本的 HttpURLConnection 用法我们不能忘记,由于 HttpClient 在 Android6.0 系统上已被废弃,这里就不写了,访问网络无非是使用 http 协议(本文介绍了使用 https 协议的例子,很遗憾,本人还没完全弄清楚,以后再深究)
用 HttpURLConnection 访问网络
/**address:访问的网络地址listener:监听*/public static void sendHttpRequest(final String address, final HttpCallbackListener listener){ new Thread(new Runnable() { @Override public void run() { HttpURLConnection connection = null; InputStream inputStream = null; try { URL url = new URL(address); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(8000); connection.setReadTimeout(8000); connection.setDoInput(true); connection.setDoOutput(true); connection.connect(); if (connection.getResponseCode() == 200) { inputStream = connection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line); } if (listener != null) { listener.onFinish(sb.toString());//从服务器获得的数据返回给调用方(依然是在子线程) } } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { if (listener != null) { listener.onFailed(e);//失败 } } finally { if (connection != null) { connection.disconnect(); } if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } }).start(); }
HttpCallbackListener接口
public interface HttpCallbackListener { void onFinish(String response); void onFailed(Exception e); }
把从服务器中读取的内容转换为字符串
public static String readFromStream(InputStream is) throws IOException{ ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buff = new byte[1024]; int len = 0; while((len =is.read(buff))!= -1){ baos.write(buff, 0, len); } String result = baos.toString(); is.close(); baos.flush(); baos.close(); return result; }
使用https协议
public static void sendHttpRequest(final String address, final HttpCallbackListener listener){ new Thread(new Runnable() { @Override public void run() { HttpsURLConnection connection = null; InputStream inputStream = null; try { SSLContext sc = SSLContext.getInstance("TLS"); sc.init(null, new TrustManager[]{new MyTrustManager()}, new SecureRandom()); URL url = new URL(address); connection = (HttpsURLConnection) url.openConnection(); connection.setSSLSocketFactory(sc.getSocketFactory()); connection.setHostnameVerifier(new MyHostnameVerifier()); connection.connect(); if (connection.getResponseCode() == 200) { inputStream = connection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line); } if (listener != null) { listener.onFinish(sb.toString());//从服务器获得的数据返回给调用方(依然是在子线程) } } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { if (listener != null) { listener.onFailed(e); } } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); } finally { if (connection != null) { connection.disconnect(); } if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } }).start(); }
用到的MyHostnameVerifier和MyTrustManager类
private static class MyHostnameVerifier implements HostnameVerifier { @Override public boolean verify(String hostname, SSLSession session) { // TODO Auto-generated method stub return true; } } private static class MyTrustManager implements X509TrustManager { @Override public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException { } @Override public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException { } @Override public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } }
使用OkHttp框架访问网络,使用回调函数返回数据
public static void sendOkHttpRequest(String url, okhttp3.Callback callback) { OkHttpClient okHttpClient = new OkHttpClient(); Request request = new Request.Builder() .url(url) .build(); okHttpClient.newCall(request).enqueue(callback); }
PS:其实上面思路也是常用的,在郭神《第一行代码第二版》有详细讲解。。。
0 0
- Android 开发之访问网络
- Android开发之HTTP访问网络
- Android之网络访问
- Android开发之访问和显示网络图片
- Android之URL访问网络
- 基础Android之访问网络
- Android 之 HttpURLConnection 访问网络
- android典型应用之访问网络
- android之网络访问http请求总结
- Android之使用HTTP协议访问网络
- Android网络访问之HttpURLConnection和HttpClient
- Android之ListView访问网络数据
- Android之使用HTTP协议访问网络
- Android之使用HttpURLConnection进行网络访问
- android复习路之http网络访问
- android网络访问之HttpURLConnection vs OkHttp
- Android网络访问之HttpURLConnection和HttpClient
- Android网络开发之蓝牙
- DELETE_FAILED_INTERNAL_ERROR Error while Installing APKs
- You Only Look Once-论文笔记
- 【信源编码作业】4. 基于 LZO 算法的编解码器
- js数组去重
- DAY4——腾讯训练营
- Android 开发之访问网络
- 2D Splatter Effects in Unity Using the Stencil Buffer
- eclipse4.6 svn 插件安装
- HDOJ 4135 Co-prime(容斥原理)
- Unity 录音
- 通用的分页思路
- 有关线程并发的学习(一)
- uva 208 -Firetruck(dfs)
- 【IMWeb训练营作业】用Vue做任务列表To do list