android 请求网络 和 httpclient的使用上传下载
来源:互联网 发布:网络女歌手排行榜 编辑:程序博客网 时间:2024/05/16 12:48
访问网络最主要的也就是 http协议了。
http协议很简单,但是很重要。
直接上代码了,里面都是1个代码块 代码块的,用哪一部分直接拷出去用就好了。
1.访问网络用 get 和 post 自己组拼提交参数 ,httpclient 方式提交
2.上传 和 下载
3.比如访问服务器后 返回来的 xml 和 json 的简单解析方法
String path = "http://192.168.13.1";String username ="ll";String pwd="123";/** get 组拼 */public void httpGet()throws Exception {String param1 = URLEncoder.encode(username);String param2 = URLEncoder.encode(pwd);URL url = new URL(path + "?name=" + param1 + "&password=" + param2);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");conn.setReadTimeout(5000);// 数据并没有发送给服务器// 获取服务器返回的流信息InputStream in = conn.getInputStream();byte[] result = StreamTool.getBytes(in);//return new String(result);}/** post 组拼 */public void httpPost() throws Exception {URL url = new URL(path);String param1 = URLEncoder.encode(username);String param2 = URLEncoder.encode(pwd);//开始连接HttpURLConnection conn = (HttpURLConnection) url.openConnection();String data = "username=" + param1 + "&password=" + param2;//设置方式 postconn.setRequestMethod("POST");//timeout 5000conn.setConnectTimeout(5000);// 设置 http协议可以向服务器写数据conn.setDoOutput(true);// 设置http协议的消息头conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");conn.setRequestProperty("Content-Length", String.valueOf(data.length()));// 把我们准备好的data数据写给服务器OutputStream os = conn.getOutputStream();os.write(data.getBytes());// httpurlconnection 底层实现 outputstream 是一个缓冲输出流// 只要我们获取任何一个服务器返回的信息 , 数据就会被提交给服务器 , 得到服务器返回的流信息int code = conn.getResponseCode();if (code == 200) {InputStream is = conn.getInputStream();byte[] result = StreamTool.getBytes(is);String ss= new String(result);}}/** httpclient get */public void httpClentGet () throws Exception{//获取到一个浏览器的实例 HttpClient client = new DefaultHttpClient();//准备请求的地址 String param1 = URLEncoder.encode(username);String param2 = URLEncoder.encode(pwd);HttpGet httpGet = new HttpGet(path + "?name=" + param1 + "&password=" + param2);//敲回车 发请求 HttpResponse ressponse = client.execute(httpGet);int code = ressponse.getStatusLine().getStatusCode();if( code == 200){InputStream is =ressponse.getEntity().getContent();//byte[] result = StreamTool.getBytes(is);}}//不需要的时候关闭 httpclient client.getConnectionManager().shutdown();/** httpclient post **/public void httpClentPost() throws Exception{//1. 获取到一个浏览器的实例 HttpClient client = new DefaultHttpClient();HttpPost httppost = new HttpPost(path);// 键值对 BasicNameValuePairList<NameValuePair> parameters = new ArrayList<NameValuePair>();parameters.add(new BasicNameValuePair("username", username));parameters.add(new BasicNameValuePair("pwd", pwd));UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters, "utf-8");//3.设置post请求的数据实体 httppost.setEntity(entity);//4. 发送数据给服务器HttpResponse ressponse = client.execute(httppost);int code = ressponse.getStatusLine().getStatusCode();if(code == 200){InputStream is =ressponse.getEntity().getContent();byte[] result = StreamTool.getBytes(is);//return new String(result);}}/*** 下载一个东西 ***/public void getFileData(Context context){try { HttpClient client = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(path); //执行 HttpResponse ressponse = client.execute(httpGet); int code = ressponse.getStatusLine().getStatusCode(); if(code == HttpStatus.SC_OK){InputStream in =ressponse.getEntity().getContent();//图片 //Bitmap bitmap = BitmapFactory.decodeStream(in);//in.close();//文件什么的比如读取了是要写在本地的//小文件直接读取 大文件读取一点写一点//byte[] result = StreamTool.getBytes(in);// //这里可以得到文件的类型 如image/jpg /zip /tiff 等等 但是发现并不是十分有效,有时明明后缀是.rar但是取到的是null,这点特别说明 System.out.println(ressponse.getEntity().getContentType()); //可以判断是否是文件数据流 System.out.println(ressponse.getEntity().isStreaming()); //设置本地保存的文件 //File storeFile = new File("c:/0431la.zip"); String path="sdcard/aa.txt"; FileOutputStream output = context.openFileOutput(path, context.MODE_PRIVATE); //得到网络资源并写入文件 InputStream input = ressponse.getEntity().getContent(); byte b[] = new byte[1024]; int j = 0; while( (j = input.read(b))!=-1){ output.write(b,0,j); } output.flush(); output.close(); }} catch (Exception e) {// TODO: handle exception}}/** * 提交数据给服务器 带一个文件 * @param filepath 文件在手机上的路径 */public void PostData(String filepath) throws Exception{// 实例化上传数据的 数组 part [] username pwdPart[] parts = { new StringPart("username", username), new StringPart("pwd", pwd), new FilePart("file", new File(filepath)) };PostMethod file_Post = new PostMethod(path); // 多种类型的数据实体file_Post.setRequestEntity(new MultipartRequestEntity(parts, file_Post.getParams()));//创建 clientorg.apache.commons.httpclient.HttpClient client = new org.apache.commons.httpclient.HttpClient(); //timeoutclient.getHttpConnectionManager().getParams().setConnectionTimeout(5000);//执行int status = client.executeMethod(file_Post);if(status==200){}}//传送文件public void setFile() throws Exception{ HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://192.168.1.1"); File file = new File(path); InputStreamEntity reqEntity = new InputStreamEntity( new FileInputStream(file), -1); reqEntity.setContentType("binary/octet-stream"); reqEntity.setChunked(true); // FileEntity entity = new FileEntity(file, "binary/octet-stream"); httppost.setEntity(reqEntity); System.out.println("executing request " + httppost.getRequestLine()); HttpResponse response = httpclient.execute(httppost); if(response.getStatusLine().getStatusCode() == 200){ }}/** 1. * 一般访问了就会返回来1个 webservice * pull解析访问webservice 返回来的xml * **/public void pullJX(byte[] bb) throws Exception{// byte[] bb = EntityUtils.toByteArray(response.getEntity()); XmlPullParser pullParser = Xml.newPullParser(); pullParser.setInput(new ByteArrayInputStream(bb), "UTF-8"); int event = pullParser.getEventType(); List<Object> info; while(event != XmlPullParser.END_DOCUMENT){ switch (event) { case XmlPullParser.START_DOCUMENT:info = new ArrayList<Object>();break; case XmlPullParser.START_TAG:if("aa".equals(pullParser.getName())){String id = pullParser.nextText().toString();}break; case XmlPullParser.END_TAG: if("aa".equals(pullParser.getName())){ } break; }event = pullParser.next(); }}/**2. * 解析 json 数据 [{id:"001",name:"lilei",age:"20"},{id:"002",name:"zhangjia",age:"30"}] */private static List parseJSON(InputStream in) throws Exception{byte[] data = StreamTool.getBytes(in);String s =new String(data);// 转换成 json 数组对象 [{"001","ll","20"},{"002","zj","30"},]JSONArray json = new JSONArray(s);for (int i = 0; i < json.length() ; i++) { JSONObject j = json.getJSONObject(i); String aa1 = j.getString("id"); String aa2 = j.getString("name"); String aa3 = j.getString("age");} return null; }
HttpClient其实是一个interface类型,HttpClient封装了对象需要执行的Http请求、身份验证、连接管理和其它特性
HttpClient有三个已知的实现类分别是:
AbstractHttpClient, AndroidHttpClient, DefaultHttpClient
AndroidHttpClient是对HttpClient的包装,内部带访问连接器,并设置为可以多线程使用,
public class MyApplication extends Application{ private AndroidHttpClient httpClient; // application oncreate的时候创建 public void onCreate(){ super.onCreate(); httpClient = AndroidHttpClient.newInstance("Android"); } //供外部调用 public AndroidHttpClient getHttpClient() { if (httpClient == null){ httpClient = AndroidHttpClient.newInstance("Android"); } return httpClient; } @Override public void onLowMemory() { super.onLowMemory(); shutdownHttpClient(); } @Override public void onTerminate() { super.onTerminate(); shutdownHttpClient(); } //关闭 private void shutdownHttpClient() { if (httpClient != null) { if (httpClient.getConnectionManager() != null) { httpClient.getConnectionManager().shutdown(); } httpClient.close(); httpClient = null; } } }
外部调用的话
AndroidHttpClient httpClient = ((MyApplication)getApplication()).getHttpClient();
- android 请求网络 和 httpclient的使用上传下载
- Android开发之网络请求通信专题(二):基于HttpClient的文件上传下载
- Android网络请求操作httpurlconnection和httpclient基本使用
- Android使用HttpClient请求网络上的数据
- Android网络常用的请求---HttpURLConnection和HttpClient
- Android应用开发网络请求 HttpClient和HttpURLConnection的区别
- Android 网络请求HttpURLConnection 和 HttpClient详解
- 网络请求之HttpClient 类的使用
- 使用httpClient请求的网络数据
- 网络请求HttpURLConnection与HttpClient的使用
- Android中使用HttpURLConnection和HttpClient实现GET和POST请求访问网络
- Android 之 HttpClient 网络请求
- 使用HttpClient方式请求网络
- 使用HttpClient方式请求网络
- Android的HttpConnection和HttpClient发送请求
- Android-网络请求数据使用apache httpclient v4
- Android使用Httpclient网络请求,get,post方法
- android获取URLConnection和HttpClient网络请求响应码
- 黑马程序员---java基础之day4-5
- 点击AlertDialog的按钮时,不自动关闭对话框
- web3d x3d规范文档 在code.csdn.net的镜像
- Leetcode Two Sum
- Exercise 5.3
- android 请求网络 和 httpclient的使用上传下载
- 不需要第三变量,实时交换数据
- ExtJS拖拽效果
- Linux和Windows搭建Ruby开发环境
- C语言中几种类型所占的字节数
- dump命令找不到的问题
- java 抓取新浪财经网上的股票数据(1)
- 怎么在spring官网上下载spring的jar包, 源代码和文档?
- 字符串反向输出