Android可以用HttpURLConnection或HttpClient接口来开发网络程序。
网络通信使用最多的是Get和Post。Get和Post的不同之处在于Get的参数放在URL字符中,而Post的参数放在http请求数据中,通过输出流的方式发送给服务器。
主要步骤为:
1、创建一个URL对象:
URL url = new URL("http://XXXXXXX");</span>
用户登录存在用户名和密码的参数,如果是GET方式,那么需要将参数加载URL后面,如果是POST的方式,需要将参数作为输出流的方式发送给服务器:
GET方式:
String data = "username=" + userName + "&password=" + password; URL url = new URL("http://XXXX?" + data);POST方式:
String data = "username=" + username + "&password=" + password; // 获得一个输出流,向服务器写数据,默认情况下,不允许程序向服务器输出数据 OutputStream os = conn.getOutputStream(); os.write(data.getBytes()); os.flush(); os.close();
2、通过url.openConnection()获得HttpURLConnection(HttpURLConnection继承自URLConnection,都是抽象类,无法直接实例化对象。):
HttpURLConnection conn = (HttpURLConnection) url.openConnection();3、设置HttpURLConnection的各项参数:
// get或者post必须得全大写 conn.setRequestMethod("GET"); // 连接的超时时间 conn.setConnectTimeout(10000); // 读数据的超时时间 conn.setReadTimeout(5000);
POST方式需要向服务器发送输出流,所以要添加一个参数设置:
// 只有设置为TRUE,才能运行程序进行输出。 conn.setDoOutput(true);
int responseCode = conn.getResponseCode(); if (responseCode == 200) { //连接成功 } else { Log.i(tag, "访问失败: " + responseCode); }5、如果连接成功的话,获得服务器端的输入流,并将输入流转化为字符串。从而判断是否登录成功
int responseCode = conn.getResponseCode(); if (responseCode == 200) { InputStream is = conn.getInputStream(); String state = getStringFromInputStream(is); return state; } else { Log.i(tag, "网络连接失败"); }
在最后一定要调用 disconnect()方法将这个 HTTP连接关闭掉:
connection.disconnect();
为了用户友好,可将登录结果作为Toast弹出,提示用户。但是网络连接一般在子线程中操作,在子线程中弹出Toast可使用如下方法:
new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub final String state = NetUtils.loginOfPost(username, password); runOnUiThread(new Runnable() { public void run() { Toast.makeText(MainActivity.this, state, 0).show(); } }); } }).start();