第一行代码-10.5 网络编程的最佳实践
来源:互联网 发布:淘宝买家秀木耳 编辑:程序博客网 时间:2024/05/16 06:59
这里涉及到两个问题:首先是网络连接的代码比较长,所以可以把它封装在一个类里面,然后设置一个静态的方法,每次要进行网络连接的时候调用它就可以了;还有一个问题是由于网络连接需要开启子线程,然而子线程又不能返回数据,所以需要设置回调函数。
这里首先创建一个接口,意思就是回调函数:
public interface HttpCallbackListener { void finish(String response); void onError(Exception e);}
然后定义HttpUtil,作为网络连接的通用类。
public class HttpUtil { public static void sendHttpRequest(final String address, final HttpCallbackListener listener) { new Thread(new Runnable() { @Override public void run() { HttpURLConnection connection = null; try { URL url = new URL(address); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setDoInput(true); connection.setDoOutput(true); InputStream in = connection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(in)); StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line); } listener.finish(sb.toString()); } catch (Exception e) { e.printStackTrace(); listener.onError(e); } finally { if (connection != null) connection.disconnect(); } } }).start(); }}
这里就是发送请求然后接收返回的数据的代码,增加的地方就是调用接口的函数。然后我们在MainActivity里调用它,注意接口都是要先实例化之后才可以调用。
private void sendHttpRequestWithHttpUtil() { String address = "http://www.baidu.com"; HttpUtil.sendHttpRequest(address, new HttpCallbackListener() { @Override public void onError(Exception e) { Log.d("MainActivity", "连接失败"); } @Override public void finish(String response) { Message msg = new Message(); msg.obj = response; handler.sendMessage(msg); } });}
需要注意的地方是接口中的代码依然是在子线程中执行的,所以也不能直接修改UI。
0 0
- 第一行代码-10.5 网络编程的最佳实践
- 活动的最佳实践--第一行代码
- 第一行代码2.6-活动的最佳实践
- 第一行代码-3.7 编写界面的最佳实践
- 第一行代码-6.5 SQLite数据库的最佳实践
- 网络编程的最佳实践
- 网络编程的最佳实践
- 网络编程的最佳实践
- 第一行代码-9.6 服务的最佳实践--后台执行的定时任务
- 第一行代码-5.5 广播的最佳实践 实现强制下线功能
- 第一行安卓代码——活动的最佳实践2.6
- 《第一行代码》读书笔记(十)----网络编程
- 网络编程最佳实践
- 启动Activity的最佳写法--《第一行代码Android》
- Android Studio 活动的最佳实践 知晓当前是在哪一个活动 随时随地地进入程序 启动活动的最佳写法 第一行代码
- 《第一行代码》——(服务最佳实践)问题,解决,体会
- 《第一行代码--Android》读书笔记之网络编程
- 网络编程最佳实践一
- Oracle数据库数据迁移到MySQL数据库时间格式问题
- java 线程操作
- 旧作:民科的一个样本--反重力和引力波董长军师傅
- UITableViewCell复用重叠的问题
- 初识presto
- 第一行代码-10.5 网络编程的最佳实践
- ExtJs5.0在WebStorm上的使用之入门教程(一)编写第一个网页 HelloExt
- Android的Handler总结
- (十三)适配器模式
- Java抽象类与接口
- 常用第三方地图
- oracle删除大数据表整表后整理
- XStream支持CDATA标签
- eclipse.ini问题