




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
由于刚接触android开发,故此想把学到的基础知识记录一下,以备查询,故此写的比较啰嗦:步骤如下:一、介绍: 此文主要是介利用android网络通信功能把android客户端的数据传给web服务端进行操作 此项目列举三个个传值方式:1、GET方式,2、POST方式,3、HttpClient方式二、新建一个android工程NewsManage 工程目录: 三、AndroidManifest.xml配置清单 由于要访问网络,故需要添加网络访问权限,红色标注添加部分 四、main.xml配置: 五、string.xml配置: Hello World, NewsManageActivity! 资讯管理 视频标题 播放时长 保存 保存成功 保存失败六、NewsManageActivity.java Activity源码:package com.example.newsmanage;import com.example.service.NewsService;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class NewsManageActivity extends Activity /* Called when the activity is first created. */ EditText titleText; EditText lengthText; Button button; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); titleText = (EditText) this.findViewById(R.id.title); lengthText = (EditText) this.findViewById(R.id.timelength); button = (Button) this.findViewById(R.id.button); public void save(View v) throws Exception String title = titleText.getText().toString(); String timelength = lengthText.getText().toString(); boolean result = NewsService.save(title,timelength); if(result) Toast.makeText(getApplicationContext(),R.string.success, Toast.LENGTH_LONG).show(); else Toast.makeText(getApplicationContext(),R.string.fail, Toast.LENGTH_LONG).show(); 七、NewsService .java 业务类源码:注:业务类提供三种发送请求的方式:get/post/httpClientpackage com.example.service;import java.io.OutputStream;import .HttpURLConnection;import .URL;import .URLEncoder;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;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;public class NewsService /* * 保存数据,传递参数给web服务器端 * param title 标题 * param timelength 时长 * return */ public static boolean save(String title, String timelength) throws Exception /05为本机IP地址,不能用localhost代替 String path = 05:8080/web/ManageServlet; Map params = new HashMap(); params.put(title, title); params.put(timelength, timelength); /get请求方式 /return sendGETRequest(path,params,UTF-8); /post请求方式 /return sendPOSTRequest(path,params,UTF-8); /httpClient请求方式,如果单纯传递参数的话建议使用GET或者POST请求方式 return sendHttpClientPOSTRequest(path,params,UTF-8);/httpclient已经集成在android中 /* * 通过HttpClient发送post请求 * param path * param params * param encoding * return * throws Exception */ private static boolean sendHttpClientPOSTRequest(String path, Map params, String encoding) throws Exception List pairs = new ArrayList();/存放请求参数 for(Map.Entry entry:params.entrySet() pairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue(); /防止客户端传递过去的参数发生乱码,需要对此重新编码成UTF-8 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs,encoding); HttpPost httpPost = new HttpPost(path); httpPost.setEntity(entity); DefaultHttpClient client = new DefaultHttpClient(); HttpResponse response = client.execute(httpPost); if(response.getStatusLine().getStatusCode() = 200) return true; return false; /* * 发送post请求 * param path 请求路径 * param params 请求参数 * param encoding 编码 * return 请求是否成功 */ private static boolean sendPOSTRequest(String path, Map params, String encoding) throws Exception StringBuilder data = new StringBuilder(path); for(Map.Entry entry:params.entrySet() data.append(entry.getKey().append(=); /防止客户端传递过去的参数发生乱码,需要对此重新编码成UTF-8 data.append(URLEncoder.encode(entry.getValue(),encoding); data.append(&); data.deleteCharAt(data.length() - 1); byte entity = data.toString().getBytes();/得到实体数据 HttpURLConnection conn = (HttpURLConnection) new URL(path).openConnection(); conn.setConnectTimeout(5000); conn.setRequestMethod(POST); conn.setDoOutput(true);/设置为允许对外输出数据 conn.setRequestProperty(Content-Type, application/x-www-form-urlencoded); conn.setRequestProperty(Content-Length, String.valueOf(entity.length); OutputStream outStream = conn.getOutputStream(); outStream.write(entity);/写到缓存 if(conn.getResponseCode()=200)/只有取得服务器返回的http协议的任何一个属性时才能把请求发送出去 return true; return false; /* * 发送GET请求 * param path 请求路径 * param params 请求参数 * return 请求是否成功 * throws Exception */ private static boolean sendGETRequest(String path, Map params,String encoding) throws Exception StringBuilder url = new StringBuilder(path); url.append(?); for(Map.Entry entry:params.entrySet() url.append(entry.getKey().append(=); /get方式请求参数时对参数进行utf-8编码,URLEncoder /防止客户端传递过去的参数发生乱码,需要对此重新编码成UTF-8 url.append(URLEncoder.encode(entry.getValue(), encoding); url.append(&); url.deleteCharAt(url.length()-1); HttpURLConnection conn = (HttpURLConnection) new URL(url.toString().openConnection(); conn.setConnectTimeout(5000); conn.setRequestMethod(GET); if(conn.getResponseCode() = 200) return true; return false; 八、由于要把数据传递给web服务端,而web端传递过来的数据有两种格式,故需要新建一个web服务,使之能接收android客户端传递的参数; 1、新建一个servlet可以接收传递的参数,源码如下: package com.example.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/* * Servlet implementation class ManageServlet */public class ManageServlet extends HttpServlet private static final long serialVersionUID = 1L; /* * see HttpServlet#HttpServlet() */ public ManageServlet() super(); /* * see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException String title = request.getParameter(title); /把客户端传递过来的参数进行重新编码使之能支持中文 /title = new String(title.getBytes(ISO8859-1),UTF-8);/使用过滤器后就不需要每次都要进行此操作 String timelength = request.getParameter(timelength); System.out.println(视频名称:+title); System.out.println(播放时长:+timelength); /* * see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException String title = request.getParameter(title); /把客户端传递过来的参数进行重新编码使之能支持中文 /title = new String(title.getBytes(ISO8859-1),UTF-8);/使用过滤器后就不需要每次都要进行此操作 String timelength = request.getParameter(timelength); System.out.println(视频名称:+title); System.out.println(播放时长:+timelength); 2、由于传递过来的参数默认编码为ISO8895-1,故打印后台的参数回事乱码故需要传递的过来的参数进行编码,但是如果每次都要对传递过来的参数都要 进行编码转换,是比较麻烦的,故需要建立一个拦截器,对传递过来的参数进行统一在一起进行编码转换,当请求/*时拦截器先进行编码处理: 拦截器代码如下: EncodingFilter .java 源码如下:package com.example.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;/* * Servlet Filter implementation class EncodingFilter */public class EncodingFilter implements Filter /* * Default constructor. */ public EncodingFilter() /* * see Filter#destroy() */ public void destroy() /* * see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException HttpServletRequest req = (HttpServletRequest) request; if(GET.equals(req.getMethod() EncodingHttpServletRequest wrapper = new EncodingHttpServletRequest(req); chain.doFilter(wrapper, response); else /post req.setCharacterEncoding(UTF-8); chain.doFilter(request, response); /* * see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException EncodingHttpServletRequest .java源码如下:package com.example.filter;import java.io.UnsupportedEncodingException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;public class EncodingHttpServletRequest extends HttpServletRequestWrapper private HttpServletRequest request; public EncodingHttpServletRequest(HttpServletRequest request) super(request); this.request = request; Override public String getParameter(String name) String value = request.getParameter(name); if(value!=null) try value = new String(value.getBytes(ISO8859-1),UTF-8); catch (UnsupportedEncodingException e) e.printStackTrace(); return value; 注意:在运行android项目前必须先运行web服务 九、先运行web服务器,然后运行android项目,发送参数后,web后台就可以打印出相应的信息十、注意事项以及相关知识点: 1、由于涉及访问网络,故需要添加网络访问权限 2、访问web服务时地址必须写网络的IP地址,否则会在本地服务上查找 3、熟悉怎么向web服务端发送请求以及方式(http协议) GET方式:HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection(); conn.setConnectTimeout(5000); conn.setRequestMethod(GET); conn.getResponseCode() = 200 来判断是否请求成功 POST方式:byte entity = data.toString().getBytes();/得到实体数据 HttpURLConnection conn = (HttpURLConnection) new URL(path).openConnection(); conn.setConnectTimeout(5000); conn.setRequestMethod(POST); con
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025公务员反常规面试题目及答案
- 2025年工业项目BIM咨询与施工一体化服务合同范本
- 2025年婚宴现场高端灯光音响设备租赁与舞台工程安装合同
- 2025年银行信贷财务风险评估与财务顾问合作协议
- 2025年度婚姻解除后共同债务分担及财产分配协议
- 2025年绿色建筑项目挖掘机租赁与管理服务协议
- 2025智能灯光音响一体化展厅改造施工合同
- 2025年企业能源优化与节能减排服务合作协议
- 2025年06289工程招标合同履行保障与争议快速处理协议
- 2025年度茶叶品牌授权线上线下同步销售合作协议
- 2025年储能专业知识考试题库及答案
- 2025至2030年中国肽饲料市场供需现状及投资战略研究报告
- 2025年餐饮供应链整合与成本控制下的餐饮企业信息化建设研究报告
- 私房拍照协议书范本大全
- 电商直播带货运营策划实操方案
- 面肌痉挛手术护理要点
- 情绪识别与营销-洞察及研究
- (2025)初级保育员理论知识考试试题及参考答案
- 2025年环保产业政策环境分析环保论证可行性研究报告
- 室上性心动过速急救护理
- 2025年度城市综合体物业管理保安员服务劳动合同范本
评论
0/150
提交评论