您的位置:首页 > 理论基础 > 计算机网络

Android开发之HttpClient

2015-06-24 19:17 501 查看
在JDK的java.net包提供了提供了访问HTTP协议的功能,但是功能还是远远不够,所以android引进了Apache的HttpClient。

1.HttpGet方式

package com.linxiaosheng.httpclient;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.EditText;

import com.linxiaosheng.R;

public class MyHttpClient extends Activity implements OnClickListener{
private EditText editText1;
private EditText editText2;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.httpclient);
editText1=(EditText)findViewById(R.id.edittext1);
editText2=(EditText)findViewById(R.id.edittext2);
button=(Button)findViewById(R.id.button1);
button.setOnClickListener(this);

}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String url="";
try {
//url的中文带参需要转码
url = "http://10.20.56.42:8082/test2/HttpClient?"+"name="+URLEncoder.encode(editText1.getText().toString(),"utf-8")+"&password="+editText2.getText().toString();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Handler handler=new Handler();
new MyHttpClientThread(url,handler).start();
}
}

class MyHttpClientThread extends Thread{
private String path;
private Handler handler;
public MyHttpClientThread(String path,Handler handler){
this.path=path;
this.handler=handler;
}

public void run(){
HttpPost httpGet=new HttpPost(path);
HttpClient httpClient=new DefaultHttpClient();
try {
HttpResponse httpResponse=httpClient.execute(httpGet);
//判断响应头是不是200
if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
final String content=EntityUtils.toString(httpResponse.getEntity());
handler.post(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(content);
}
});
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}


2.HttpPost方式提交

package com.linxiaosheng.httpclient;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import android.app.Activity;
import android.content.Entity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

import com.linxiaosheng.R;

public class MyHttpClient extends Activity implements OnClickListener{
private EditText editText1;
private EditText editText2;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.httpclient);
editText1=(EditText)findViewById(R.id.edittext1);
editText2=(EditText)findViewById(R.id.edittext2);
button=(Button)findViewById(R.id.button1);
button.setOnClickListener(this);

}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String url="http://10.20.56.42:8082/test2/HttpClient";
Handler handler=new Handler();
new MyHttpClientThread(url,handler).start();
}
}

class MyHttpClientThread extends Thread{
private String path;
private Handler handler;
public MyHttpClientThread(String path,Handler handler){
this.path=path;
this.handler=handler;
}

public void run(){
//建立httppost对象
HttpPost httpPost=new HttpPost(path);
/**
* 定义了一个list,该list的数据类型是NameValuePair(简单名称值对节点类型),这个代码多处用于Java像url发送Post请求。在发送post请求时用该list来存放参数
*/
List<NameValuePair> list=new ArrayList<NameValuePair>();
//添加参数
list.add(new BasicNameValuePair("name", "林晓升"));
list.add(new BasicNameValuePair("age","888"));
try {
//设置编码,这里要设置utf-8的编码
HttpEntity httpEntity=new UrlEncodedFormEntity(list,"UTF-8");
httpPost.setEntity(httpEntity);
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//创建httpclient
HttpClient httpClient=new DefaultHttpClient();
try {
//发送post,返回httpresponse
HttpResponse httpResponse=httpClient.execute(httpPost);
//判断响应头是不是200
if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
final String content=EntityUtils.toString(httpResponse.getEntity());
handler.post(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(content);
}
});
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
httpClient.getConnectionManager().shutdown();
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: