使用HttpClient框架不需要去操作任何的字符串,而且用框架提交数据post请求头里的数据都是由框架自动生成,程序员只管提交数据,框架会根据你提交的数据大小/类型等不同自动生成post请求头里应该有的属性,而不需要自己操作字符串来生成,这样在开发中效率会更高,也更便于理解.
使用HttpClient框架进行GET提交
基本框架:
//使用httpClient框架做get方式提交
//1,创建HttpClient对象
HttpClient hc = new DefaultHttpClient();
//2,创建httpGet对象
HttpGet hg = new HttpGet();
try {
//3,使用客户端对象把get请求发出去
hc.execute(hg);
} catch (Exception e) {
e.printStackTrace();
}
public void get(View v){
EditText et_name = (EditText) findViewById(R.id.et_name);
EditText et_pass = (EditText) findViewById(R.id.et_pass);
final String name = et_name.getText().toString();
final String pass = et_pass.getText().toString();
Thread t = new Thread(){
@Override
public void run() {
String path = "http://10.66.121.5/WebGet/servlet/LoginServlet?name=" +URLEncoder.encode(name) + "&pass=" + pass;
//使用httpClient框架做get方式提交
//1,创建HttpClient对象
HttpClient hc = new DefaultHttpClient();
//2,创建httpGet对象,构造方法的参数就是网址
HttpGet hg = new HttpGet(path);
try {
//3,使用客户端对象把get请求发出去
HttpResponse hr = hc.execute(hg);
//拿到响应头中的状态行(就是第一行)
StatusLine sl = hr.getStatusLine();
//状态码==响应码
if(sl.getStatusCode() == 200){
//拿到响应头的实体,即服务器所返回的内容
HttpEntity he = hr.getEntity();
//拿到实体中的内容,即服务器返回的输入流
InputStream is = he.getContent();
String text = Utils.getTextFromStream(is);
//发送消息,让主线程刷新ui
Message msg = handler.obtainMessage();
msg.obj = text;
handler.sendMessage(msg);
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
t.start();
}
使用HttpClient框架进行POST提交
public void post(View v){
EditText et_name = (EditText) findViewById(R.id.et_name);
EditText et_pass = (EditText) findViewById(R.id.et_pass);
final String name = et_name.getText().toString();
final String pass = et_pass.getText().toString();
Thread t = new Thread(){
@Override
public void run() {
String path = "http://10.66.121.5/WebGet/servlet/LoginServlet";
//1,创建客户端对象
HttpClient hc = new DefaultHttpClient();
//2,创建post请求对象
HttpPost hp = new HttpPost(path);
//封装form表单提交的数据
BasicNameValuePair bnvp = new BasicNameValuePair("name", name);
BasicNameValuePair bnvp2 = new BasicNameValuePair("pass", pass);
List<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>();
//把BasicNameValuePair放入集合中
parameters.add(bnvp);
parameters.add(bnvp2);
try {
//要提交的数据已经在集合中了,把集合传给实体对象
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters, "utf-8");
//设置post请求对象的实体,实际上是把要请求的数据封装到post请求的输出流中
hp.setEntity(entity);
//3,使用客户端发送post请求
HttpResponse hr = hc.execute(hp);
if(hr.getStatusLine().getStatusCode() == 200){
InputStream is = hr.getEntity().getContent();
String text = Utils.getTextFromStream(is);
Message msg = handler.obtainMessage();
msg.obj = text;
handler.sendMessage(msg);
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
t.start();
}
使用异步HttpClient框架进行GET提交
开源框架:https://github.com/loopj/android-async-http
ExampleUsage.java
public class ExampleUsage {
public static void makeRequest() {
AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.google.com", new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
System.out.println(response);
}
});
}
}
由此看来使用比较简单
public void get(View v){
EditText et_name = (EditText) findViewById(R.id.et_name);
EditText et_pass = (EditText) findViewById(R.id.et_pass);
final String name = et_name.getText().toString();
final String pass = et_pass.getText().toString();
String url = "http://10.66.121.5/WebGet/servlet/LoginServlet?name=" +URLEncoder.encode(name) + "&pass=" + pass;
//创建异步httpClient
AsyncHttpClient ahc = new AsyncHttpClient();
//发送get请求提交数据
ahc.get(url, new MyResponseHandler());
}
class MyResponseHandler extends AsyncHttpResponseHandler{
//请求服务器成功时,此方法会调用(注:不管密码对不对,只要响应码是200就调用)
@Override
public void onSuccess(int statusCode, Header[] headers,
byte[] responseBody) {
Toast.makeText(MainActivity.this, new String(responseBody), 0).show();
}
//请求失败此方法调用
@Override
public void onFailure(int statusCode, Header[] headers,
byte[] responseBody, Throwable error) {
//此时responseBody是错误界面的源文件,因此可以简单弹一个"请求失败"
Toast.makeText(MainActivity.this, "请求失败", 0).show();
}
}
使用异步HttpClient框架进行POST提交
public void post(View v){
EditText et_name = (EditText) findViewById(R.id.et_name);
EditText et_pass = (EditText) findViewById(R.id.et_pass);
final String name = et_name.getText().toString();
final String pass = et_pass.getText().toString();
String url = "http://10.66.121.5/WebGet/servlet/LoginServlet";
//创建异步httpClient
AsyncHttpClient ahc = new AsyncHttpClient();
//把要提交的数据封装至RequestParams对象
RequestParams params = new RequestParams();
params.add("name", name);
params.add("pass", pass);
//发送post请求提交数据
ahc.post(url, params, new MyResponseHandler());
}