android做客户端连接web服务器
2015-11-23 20:28
337 查看
android做客户端连接web服务器
android要想实现应用肯定是离不开连接网络
一、android客户端:(1)配置文件(AndroidMainfest):
加入下列代码:
<uses-permission android:name="android.permission.INTERNET"/>
添加位置只要在< application>标签外面就可以了
(2)MainActivity:
public class MainActivity extends Activity { String result = ""; String url="http://192.168.0.6:8909/ServletTest/servlet2"; /*这里是连接服务器的url,如果不懂后面还有更详细地解释*/ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /*点击button执行连接网络代码*/ findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { connectInternet(); /*连接网络,result会被赋值*/ Log.e("asdaa", result); /*在控制台输出result*/ } }); } public void connectInternet() { new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub HttpClient hc = new DefaultHttpClient(); HttpPost hp = new HttpPost( url); JSONObject jo = new JSONObject(); /*JSONObject在连接网络传递数据是最常用的包装数据方式,当然也可以直接发送String类型的*/ try { jo.put("name", "zwq"); /*给jo赋值,jo中是以键值对的形式存在*/ StringEntity se = new StringEntity(jo.toString()); /*包装可以通过网络发送的数据*/ hp.setEntity(se); /*将包装好的数据放在hp中*/ HttpResponse hr = hc.execute(hp); /*执行连接语句并获得返回数据*/ if (hr.getStatusLine().getStatusCode() == 200) /*200是固定的,如果等于200,就说明服务器连接成功并有返回值*/ { result = EntityUtils.toString(hr.getEntity()); /*解析获得的数据并赋值给result*/ } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start(); } }
另外说明一下:android4.0以后不能在主线程中连接网络,所以需要重新创建线程;还有除主线程外,其他线程不能改主界面显示的内容,需要用handler配合使用。
二web客户端:
我主要用的是javaee和myeclipse,插件是tomcat,如何配置环境,可以百度搜一下,资料挺多的。
先看一下我的项目目录:
(1)配置文件中(web.xml):
<servlet> <servlet-name>MMM</servlet-name> <!-- 服务名字--> <servlet-class>com.test.servlet2</servlet-class> <!-- 服务路径,后面有解释--> </servlet> <servlet-mapping> <servlet-name>MMM</servlet-name> <!-- 服务名字--> <url-pattern>/servlet2</url-pattern> <!-- 捕获什么样的url--> </servlet-mapping> </web-app>
前面也提到了url是 “http://192.168.0.6:8909/ServletTest/servlet2”(别点开,点开也没用),192.168.0.6是服务器的IP地址;8909是Tomcat端口号;ServletTest是我自己创建的项目的名字;重点是/servlet2,在配置文件中 < url-pattern>/servlet2< / url-pattern>就是要捕获这个,如果url中符合全部的条件即IP地址没错,端口号没错,项目名称没错,最后面url与< url-pattern>中的对应起来,那客户端就可以访问< servlet-class>com.test.servlet2< /servlet-class>中的这个类了。
(2)servlet2.java中:
public class servlet2 extends HttpServlet { /** * */ private static final long serialVersionUID = -8739666074906935331L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); /*从客户端传来的数据放在request,如果传数据方式是doGet,就把request和response传给doPost并执行*/ } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String result = ""; String b=""; BufferedReader br = new BufferedReader(new InputStreamReader( (ServletInputStream) request.getInputStream(), "utf-8")); StringBuffer sb = new StringBuffer(""); String temp; while ((temp = br.readLine()) != null) { sb.append(temp); } br.close(); /*上述代码都是一样的,我用的时候都是复制的,无外乎就是对数据的截取*/ System.out.println("请求报文:" + sb.toString()); System.out.println("请求成功"); try { JSONObject jo=new JSONObject(sb.toString()); /*把获得String类型数据转化成JSONObject方便操作*/ if(jo.getString("name").equals("zwq")){ b="ok"; } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("返回报文:" + b.toString()); PrintWriter pw = response.getWriter(); pw.write(b.toString()); /*返回数据*/ pw.flush(); pw.close(); } }
服务端ok了
需要特别注意的是乱码问题,也百度搜一搜吧。
分享一下我在连接网络的时候经常碰到的问题:
①:配置文件中没有添加网络权限:
< uses-permission android:name=”android.permission.INTERNET”/>
②:服务端出错,现在主要是用tomcat做服务,做好服务端之后可以先用浏览器试用链接
③:不能在主线程连接网络:
android 4.0以后需要添加一个线程去访问网络
④:注意HttpPost中的url,这次因为忽略了”http:”后的”//”弄了半天才纠结过来
因为目前我现在主要研究android,javaweb方面也接触过,看看以后有空的话再详细地解释下javaweb。
这里代码的客户端,使用的是安卓的HttpClient,也可以使用java的HttpURLConnection相关文章推荐
- Android中Json数据的生成与解析
- Android打开隐藏的应用
- 收藏的Android自定义控件
- Android 学习资源分享:官方示例Support-V7 Demos
- Android初步 简单demo
- Android中的DrawRect()参数解析
- 如何修改mtk android 默认拍照size
- Android——广播
- [Android] 浅析总结 AS 中 Gradle 配置运行
- 基于Android XML解析与保存的实现
- [android] cannot be cast to android.widget.HeaderViewListAdapter
- Android图片高斯模糊的一些方法
- 改Android手机定位位置
- 获取屏幕或图片的宽和高
- android学习笔记4——spannablestring
- Android之文本框自动获取发送到手机的短信验证码
- androidstudio Butterknife-7.0.1的配置使用
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- Android开发之去掉title的三种方法
- Android Matrix相关操作总结