自己整理,整理得不好,不喜勿喷! HTTP通信 HttpURLConnection接口 HTTP超文本传输协议,用于传送WWW方式的数据。HTTP协议采用了请求/响应模式。 Android提供了HTTPURLConnection和HttpClient接口来开发HTTP程序。 HTTP使用最多的就是Get和Post,Get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给服务器。HttpUrlConnection是抽象类, 无法直接实例化对象,所以只能够通过URL的openConnection方法获得。 URL url = new URL(“http://www.google.com/”); HttpURLConnection urlconn = (HttpURlConnection)url.openConneciton(); openConnection只是创建了实例但并没真正的连接操作。 //设置输入(输出)流 urlconn.setDoOutput(true); urlconn.setDoInput(true); //设置方式POST urlconn.setRequestMethod(“POST”); //POST请求不能使用缓存 urlconn.setUseCaches(false); //完成连接之后要关闭这个连接 urlconn.disconnect;一般代码 String httpUrl = “http://www.baidu.com”; String resultData = null; URL url = null; try {url = new URL(http); } catch(MalformedException) {} If(url!=null) {Try{ //使用HTTPURLConnetion打开连接HttpURLConnetion urlConn = (HttpURLConnetion)url.openConnetion();//得到读取的类容InputStreamReader in = new InputStreamReader(urlconn.getInputStream());BufferReader buffer = new BufferReader(in);String inputLine = null;While((inputLine = buffer.readLine())!=null){resultData += inputLine;}//关闭InputStreamReader In.close();//关闭http连接 Urlconn.disconnect();} } 用Get方式传递参数很简单,只需加上传递的参数即可。 String httpurl1 = “http://www.baidu.com?par=abcdefg”; ?par=abcdefg为传递的参数par由于HttpURLConnection默认使用Get方式,如果我们要像使用Post方式,则只需要setRequestMethod设置主要代码: //设置POST请求方式 urlconn.setRequestMethod(“POST”);HttpClient接口 HttpClient更适合Android上开发互联网应用。 ClientConnectionManager接口 ClientConnectionManager是客户端连接管理器接口,主要有以下几个抽象方法。 closeIdleConnections 关闭空闲的连接 releaseConnection 释放一个连接 requestConnection 请求一个新的连接 shutdown 关闭管理器并释放DefaultHttpClient DefaultHttpClient是默认的一个Http客户端,我们可以使用它创建一个Http连接 代码: HttpClient httpclient = new DefaultHttpClient();HttpResponse HttpRespone是一个Http连接响应,当执行一个HTTP连接后,就会 返回一个HttpResponse,可以通过HttpResponse获得一些响应的信息。 请求一个Http连接并获得该请求是否成功的代码: HttpResponse httpResponse = httpClient.execute(httpRequest()); If(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK) {//连接成功 } HttpClient中如何使用Get方式获取数据。这里需要使用HttpGet来构建一个Get方式的Http请求, 然后通过HttpClient来执行这个请求,HttpResponse在接收这个请求后给出响应,最后通过“HttpResponse.getStatusLine().getStatusCode()” 来判断请求是否成功并处理。 主要代码: //http地址 String httpUrl = “http://192.168.0.1:8080/http1.jsp?par=Http Client_android_Get”; //HttpGet连接对象 HttpGet httpRequest = new HttpGet(httpUrl); try {//获取HttpCilent对象HttpClient httpClient = new DefaultHttpClient();//请求HttpClient,取得HttpReponseHttpResponse httpResponse = httpCilent.execute(httpRequest);//判断请求If(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){String strResult = EntityUtil.toString(httpResponse.getEntity());} } catch(ClientProtocolException) { } catch(IOException) { }用POST方式与Get方式不一样 需要使用NameValuePair来保存传递的数据的参数,这里可以使用BasicNameValuePair来构造要被传递的参数,然后通过add方法添加到这个参数到NameValuePair中 代码: //使用NameValuePair来保存要传递的Post参数 List params = new ArrayList(); //添加要传递的参数 Params.add(new BasicNamePair(“par”,”HttpClient_android_Post”)); Post方式需要设置所使用的字符集,最后就和Get方式一样通过HttpClient来请求这个连接,返回响应并处理。关键代码: //HttpPost连接对象 HttpPost httpRequest = new HttpPost(httpUrl); List params = new ArrayList(); //添加要传递的参数 Params.add(new BasicNamePair(“par”,”HttpClient_android_Post”)); try {//设置字符集HttpEntity httpentity = new UrlEncodedFormEntity(params,”gb2312”);//请求httpRequest httpRequest.setEntity(httpentity);//…………..和Get操作一样 }实时更新: 实时更新需要通过一个线程来控制是视图的更新。 例:实现android程序中每隔5秒刷新一次视图。 public class Test_GetOnTimeActivity extends Activity {TextView tv ;Button btn;MyHandler myHandler;MyThread myThread;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);tv = (TextView)findViewById(R.id.textView1);btn = (Button)findViewById(R.id.button1);btn.setOnClickListener(new Button.OnClickListener(){@Overridepublic void onClick(View v) {refresh();}});myHandler = new MyHandler();myThread = new MyThread();new Thread(myThread).start();}//刷新网页更新private void refresh(){String httpUrl = "http://www.sina.com.cn/";String resultData = null;URL url = null;try{url = new URL(httpUrl);}catch(MalformedURLException e){e.printStackTrace();}if(url!=null){try{HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();InputStreamReader in = new InputStreamReader(urlConn.getInputStream());BufferedReader buffer = new BufferedReader(in);String inputLine = null;while((inputLine = buffer.readLine())!=null){resultData += inputLine+"\n";}in.close();urlConn.disconnect();}catch(IOException e){e.printStackTrace();}if(resultData!=null){tv.setText(resultData);}else{tv.setText("No data");}}}class MyThread implements Runnable{@Overridepublic void run() {while(true){try{Thread.sleep(5*1000);myHandler.sendMessage(myHandler.obtainMessage());}catch(InterruptedException e){e.printStackTrace();}}}}class MyHandler extends Handler{@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);refresh();}public MyHandler() {super();}} }
http://blog.sina.com.cn/s/blog_6e13876401013hpm.html 转