android两种基本联网方式与一种第三方开源项目的使用_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > android两种基本联网方式与一种第三方开源项目的使用

android两种基本联网方式与一种第三方开源项目的使用

 2016/6/23 5:32:43  烟花易冷心已碎  程序员俱乐部  我要评论(0)
  • 摘要:安卓请求网络的三种方式在请求网络的时候一般常用的提交方式是post或者get请求,post请求安全,传输大小无限制,但是代码量多些,get请求是浏览器有大小限制,用户提交的信息在浏览器的地址栏显示出来因此不安全在Android中联网请求需要添加权限,4.0以后需要开启一个线程,在网络请求的时候都是以流的方式传输的第一步使用系统URL的方式联网(熟练地了解,当服务器需要传入特殊的请求头时候需要使用这种)get关于names与passwords是用户输入要提交的数据//1.设置连接的网络地址
  • 标签:android 使用 项目 方式 开源 开源项目
安卓请求网络的三种方式 在请求网络的时候一般常用的提交方式是post或者get请求,post请求安全,传输大小无限制,但是代码量多些,get请求是浏览器有大小限制,用户提交的信息在浏览器的地址栏显示出来因此不安全Android中联网请求需要添加权限,4.0以后需要开启一个线程,在网络请求的时候都是以流的方式传输的 第一步使用系统URL的方式联网 (熟练地了解,当服务器需要传入特殊的请求头时候需要使用这种)   get 关于names与passwords是用户输入要提交的数据 // 1.设置连接的网络地址,get请求就是拼接用户提交的内容到URL重点注意事项:在安卓测试中ip地址不可写localhost 因为安卓手机无法识别本地回环地址,必须是指定的ip地址,否则执行到获取响应码一行时不执行,不报错等,服务器拿不到提交的信息, 也不会做出任何的反馈,所以执行到获取反馈时无任何执行 String path = "http://172.17.25.55:8080/login/LoginServlet?username="+ names + "&password=" + passwords; // 2.创建一个URL的连接实例 URL url = new URL(path); // 3.通过URL的连接实例打开一个连接强转成HttpURLConnection HttpURLConnection httpurlconn = (HttpURLConnection) url.openConnection(); // 然后设置请求的方式,这里一定要大写,GET httpurlconn.setRequestMethod("GET"); // 利用强转后的连接设置请求响应超时 httpurlconn.setConnectTimeout(5000); // 获取服务器返回的响应码 int responseCode = httpurlconn.getResponseCode(); // 如果响应码是200就是成功,206是部分成功,404找不到页面,504等是服务器内部错误 if (responseCode == 200) {  // 响应成功后拿到服务器返回的数据,服务器返回是以字节流的形式返回 InputStream ins = httpurlconn.getInputStream(); // 读取内容展示由于联网是需要开线程的而UI不允许子线程更新所以在UI线程写个方法在UI线程更新 }   post 关于names与passwords是用户输入要提交的数据  //1.请求路径 ☆☆☆☆☆☆☆重点注意事项:在安卓测试中ip地址不可写localhost 因为安卓手机无法作为服务端,所以无法使用本地回环地址,必须是指定的ip地址,否则执行到获取响应码一行时不执行,不报错等, 服务器拿不到提交的信息,也不会做出任何的反馈,所以执行到获取反馈时无任何执行 String path = "http://172.17.25.55:8080/login/"; // 2.创建一个URL的连接实例 URL url = new URL(path); // 3.通过URL的连接实例打开一个连接强转成HttpURLConnection  HttpURLConnection con = (HttpURLConnection) url.openConnection(); // 利用强转后的连接设置请求响应超时 con.setConnectTimeout(5000); // 然后设置请求的方式,这里一定要大写GET☆☆☆☆ con.setRequestMethod("POST"); // 请求体内容☆☆☆☆☆☆☆ String data = "username=" + names + "&password="+ passwords; //请求方式是固定的必须这么写包括大小写这个是☆☆☆☆☆☆☆ con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); //请求体(内容)的长度固定的必须这么写包括大小写这个是☆☆☆☆☆ con.setRequestProperty("Content-Length", data.length()+""); con.setDoOutput(true);// 设置一个标记允许输出数据☆☆☆☆☆ //写入数据把我们组拼好的数据提交给服务器以流的形式提交 ☆☆☆☆ con.getOutputStream().write(data.getBytes()) int responseCode = con.getResponseCode(); // 如果响应码是200就是成功,206是部分成功,404找不到页面,504等是服务器内部错误 if (responseCode == 200) { // 响应成功后拿到服务器返回的数据,服务器返回是以字节流的形式返回 InputStream ins = httpurlconn.getInputStream(); // 读取内容展示由于联网是需要开线程的而UI不允许子线程更新所以在UI线程写个方法在UI线程更新 } 第二步使用系统结借鉴Alpha的封装好的类(了解即可)原因是请求头信息封装好了但是过于复杂,第三方完全可以更好的替代 //[2.1]定义get方式要提交的路径小细节如果提交中文要对name 和 pwd 进行一个urlencode 编码  Get // 1.设置连接的网络地址,利用URLEncoder编码用户提交的数据这样中文就能够提交了,而且用户的信息有一些保障 关于names与passwords是用户提交的数据 String path ="http://172.17.25.55:8080/login/LoginServlet?username="+ URLEncoder.encode(names,"utf-8") + "&password=" +URLEncoder.encode(passwords,"utf-8") ; //2.获取httpclient实力直接new它的子类 DefaultHttpClient dehttp = new DefaultHttpClient(); //3.准备get请求 HttpGet get = new HttpGet(path); //4.执行一个请求返回的是服务器响应结果 HttpResponse httpresponse = dehttp.execute(get); //5.拿到服务器响应码 int statusCode = httpresponse.getStatusLine().getStatusCode(); if(statusCode==200){ //6.获取服务器返回的数据以实体的形式返回 InputStream content = httpresponse.getEntity().getContent(); //7.读取展示结果 } Post  String path = "http://172.17.25.55:8080/login/LoginServlet"; //2.获取httpclient实力直接new他的子类 DefaultHttpClient dehttp = new DefaultHttpClient(); //3准备 post请求 HttpPost post = new HttpPost(path); //4.开始准备post提交的正文,以键值对的形成 /4.1准备一个集合存放NameValuePair List<NameValuePair> an = new ArrayList<NameValuePair>(); //4.2创建NameValuePair子类实现是BasicNameValuePair //创建需要提交的数据以key value的形式提交key是服务器根据去取的key BasicNameValuePair bnp1 = new BasicNameValuePair("username",names); BasicNameValuePair bnp2 = new BasicNameValuePair("password",passwords); //4.3添加到集合中 an.add(bnp1); an.add(bnp2); //4.4准备entity实体 new一个子类实现UrlEncodedFormEntity //UrlEncodedFormEntity需要的是一个List<? extends NameValuePair> UrlEncodedFormEntity uf = new UrlEncodedFormEntity(an); //4.5设置实体 post.setEntity(uf); //5.执行一个请求返回的是服务器响应结果 HttpResponse httpresponse = dehttp.execute(post); //6.拿到服务器响应码 int statusCode = httpresponse.getStatusLine().getStatusCode(); if(statusCode==200){ //7.获取服务器返回的数据以实体的形式返回 InputStream content = httpresponse.getEntity().getContent(); //8.读取展示结果 } 第三步使用开源项目Asynhttpclient(熟练掌握) 注意:使用Asynhttpclient需要导入第三方的com包,导完后报错,一个市报名错误删除即可还有一个是没有导包,导入包即可使用  关于names与passwords是用户提交的数据  Get // 1.设置连接的网络地址,利用URLEncoder编码用户提交的数据这样中文就能够提交了,而且用户的信息有一些保障 String path = "http://172.17.25.55:8080/login/LoginServlet?username=" + URLEncoder.encode(names,"utf-8") + "&password=" +URLEncoder.encode(passwords,"utf-8") ; //2.创建一个asynchttp AsyncHttpClient ashttp = new AsyncHttpClient(); //3.进行get请求传入一个路径,与一个AsyncHttpResponseHandler响应线程 ashttp.get(path,new AsyncHttpResponseHandler() { //请求成功的回调方法 @Override public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { //responseBody服务器返回的正文statusCode服务器返回的状态码,  Header服务器返回的响应头信息 try { Toast.makeText(MainActivity.this,new String(responseBody,"gbk"), 0).show(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } //请求失败回调的方法 @Override public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { Toast.makeText(MainActivity.this,new String(responseBody), 0).show(); } }); Post String path = "http://172.17.25.55:8080/login/LoginServlet"; // 创建一个asynchttp AsyncHttpClient ashttp = new AsyncHttpClient(); //准备请求体内容 RequestParams params = new RequestParams(); params.put("username", names); params.put("password", passwords); //请求一个post请求 ashttp.post(path, params ,new AsyncHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { try { Toast.makeText(MainActivity.this,new String(responseBody, "gbk"), 0).show(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } @Override public void onFailure(int statusCode, Header[] headers,byte[] responseBody, Throwable error) { Toast.makeText(MainActivity.this, new String(responseBody),0).show(); } });

 

发表评论
用户名: 匿名