一 服务器准备:

  本文使用Tomcat 6做服务器。

  本文搭建服务器端使用MyEclipse 10。

  首先准备好Tomcat 6与MyEclipse 10,并且将服务器配置到MyEclipse中,对于长期做JavaWeb的同学来说,当然知道了,在此不做赘述了。

  新建Web项目MyDemo,代码如下:

  然后在项目中新建一个Servlet,具体如下:

  Login.java:

 1 package cn.clear.demo;
 2
 3 import java.io.IOException;
 4
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9
10 public class Login extends HttpServlet {
11   
12     public void doGet(HttpServletRequest request, HttpServletResponse response)
13             throws ServletException, IOException {
14         System.out.println("这是get请求");
15         response.setContentType("text/html;charset=utf-8");
16         String userName = request.getParameter("username");
17         String userPass = request.getParameter("userpass");
18         System.out.println(userName + " " + userPass);
19         if (userName != null || userPass != null) {
20             if (userName.equals("clear") && userPass.equals("123456")) {
21                 response.getWriter().write("恭喜" + userName + "登陆成功!");
22             } else {
23                 response.getWriter().write("用户名或者密码错误!");
24             }
25         } else {
26             response.getWriter().write("用户名或者密码为空!");
27         }
28
29     }
30
31     public void doPost(HttpServletRequest request, HttpServletResponse response)
32             throws ServletException, IOException {
33         System.out.println("这是post请求");
34         response.setContentType("text/html;charset=utf-8");
35         String userName = request.getParameter("username");
36         String userPass = request.getParameter("userpass");
37         System.out.println(userName + " " + userPass);
38         if (userName != null || userPass != null) {
39             if (userName.equals("clear") && userPass.equals("123456")) {
40                 response.getWriter().write("恭喜" + userName + "登陆成功!");
41             } else {
42                 response.getWriter().write("用户名或者密码错误!");
43             }
44         } else {
45             response.getWriter().write("用户名或者密码为空!");
46         }
47
48     }
49
50 }

  web.xml:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="2.5"
 3     xmlns="http://java.sun.com/xml/ns/javaee"
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 7   <display-name></display-name>
 8   <servlet>
 9     <servlet-name>Login</servlet-name>
10     <servlet-class>cn.clear.demo.Login</servlet-class>
11   </servlet>
12
13   <servlet-mapping>
14     <servlet-name>Login</servlet-name>
15     <url-pattern>/login</url-pattern>
16   </servlet-mapping>
17   <welcome-file-list>
18     <welcome-file>index.jsp</welcome-file>
19   </welcome-file-list>
20 </web-app>

  启动服务器,使用http://10.0.1.72:8080/MyDemo/login访问,如果成功,此时MyEclipse的Console中将会显示:

  这是get请求

  null null

  浏览器将显示:用户名或者密码为空!

  这是因为我们没有使用传入任何参数。但是已经成功搭建并启动好一个简单的服务器。如果在浏览器地址栏中加入参数访问的话http://10.0.1.72:8080/MyDemo/login?username=clear&userpass=123456

  则Console中会打印:

  这是get请求

  clear 123456

  浏览器显示:恭喜clear登陆成功!

  表示我们的服务器接收参数和一系列交互是没有问题的。那么下面就可以搭建Android客户端代码了。

二 客户端:

  准备好android开发环境,我这里使用的开发工具是android studio。

  Sdk版本如下:

  

  新建项目LoginDemo,让它自动生成MainActivity.java与activity_main.xml:

  加入android-async-http框架jar包(具体请去https://github.com/loopj/android-async-http下载):android-async-http-1.4.7.jar

  修改activity_main.xml中的代码,具体如下:

  

 1 <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:stretchColumns="1">
 6
 7     <TableRow>
 8         <TextView
 9             android:layout_width="wrap_content"
10             android:layout_height="wrap_content"
11             android:textSize="20dp"
12             android:textColor="#ff7b09ff"
13             android:text="用户名:"/>
14         <EditText
15             android:id="@+id/et_name"
16             android:layout_width="0dp"
17             android:layout_height="wrap_content"
18             android:layout_weight="1"
19             android:textColorHint="#ffabb3ff"
20             android:hint="请输入您的用户名"/>
21     </TableRow>
22     <TableRow>
23         <TextView
24             android:layout_width="wrap_content"
25             android:layout_height="wrap_content"
26             android:textSize="20dp"
27             android:textColor="#ff7b09ff"
28             android:text="密    码:"/>
29         <EditText
30             android:id="@+id/et_pass"
31             android:layout_width="0dp"
32             android:layout_height="wrap_content"
33             android:layout_weight="1"
34             android:inputType="textPassword"
35             android:textColorHint="#ffabb3ff"
36             android:hint="请输入您的密码"/>
37     </TableRow>
38     <TableRow >
39         <Button
40             android:id="@+id/login"
41             android:onClick="login"
42             android:layout_height="wrap_content"
43             android:layout_span="2"
44             android:text="登陆"/>
45     </TableRow>
46     <TextView
47         android:id="@+id/result"
48         android:layout_width="match_parent"
49         android:layout_height="wrap_content"
50         android:gravity="center"
51         android:text="内容显示区"/>
52
53 </TableLayout>

  这样建立一个登陆界面:

  修改MainActivity.java的代码:

  1 package com.app.logindemo;
  2
  3 import android.app.Activity;
  4 import android.os.Bundle;
  5 import android.text.TextUtils;
  6 import android.util.Log;
  7 import android.view.View;
  8 import android.view.Window;
  9 import android.widget.EditText;
 10 import android.widget.TextView;
 11 import android.widget.Toast;
 12
 13 import com.loopj.android.http.AsyncHttpClient;
 14 import com.loopj.android.http.AsyncHttpResponseHandler;
 15 import com.loopj.android.http.RequestParams;
 16
 17 import org.apache.http.Header;
 18
 19
 20 public class MainActivity extends Activity {
 21
 22     private EditText et_name,et_pass;
 23     private TextView tv_result;
 24
 25     @Override
 26     protected void onCreate(Bundle savedInstanceState) {
 27
 28         super.onCreate(savedInstanceState);
 29         requestWindowFeature(Window.FEATURE_NO_TITLE);
 30         setContentView(R.layout.activity_main);
 31
 32         //获取控件的对象
 33         et_name = (EditText) findViewById(R.id.et_name);
 34         et_pass = (EditText) findViewById(R.id.et_pass);
 35         tv_result = (TextView) findViewById(R.id.result);
 36
 37     }
 38
 39     //点击登陆按钮事件
 40     public void login(View v){
 41
 42         int id = v.getId();
 43         switch (id){
 44             case R.id.login:
 45                 //获取用户名和密码
 46                 String userName = et_name.getText().toString();
 47                 String userPass = et_pass.getText().toString();
 48
 49                 if (TextUtils.isEmpty(userName.trim()) || TextUtils.isEmpty(userPass.trim())){
 50                     Toast.makeText(this,"用户名或者密码不能为空",Toast.LENGTH_LONG).show();
 51                 }else{
 52                     //如果用户名和密码已经输入,则进入以下方法
 53                     loginByAsyncHttpClientPost(userName, userPass);
 54                     //loginByAsyncHttpClientGet(userName,userPass);
 55                 }
 56             break;
 57         }
 58     }
 59     //post请求
 60     private void loginByAsyncHttpClientPost(String userName, String userPass) {
 61         //创建异步请求对象
 62         AsyncHttpClient client = new AsyncHttpClient();
 63         //输入要请求的url
 64         String url = "http://10.0.1.72:8080/MyDemo/login?";
 65         //String url = "http://www.baidu.com";
 66         //请求的参数对象
 67         RequestParams params = new RequestParams();
 68         //将参数加入到参数对象中
 69         params.put("username",userName);
 70         params.put("userpass",userPass);
 71         //进行post请求
 72         client.post(url, params, new AsyncHttpResponseHandler() {
 73             //如果成功
 74             @Override
 75             public void onSuccess(int i, Header[] headers, byte[] bytes) {
 76                 //i代表状态码
 77                 if (i == 200){
 78                     tv_result.setText(new String(bytes));
 79                 }
 80             }
 81             //如果失败
 82             @Override
 83             public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {
 84                 //打印异常信息
 85                 throwable.printStackTrace();
 86             }
 87         });
 88
 89     }
 90     //get请求
 91     private void loginByAsyncHttpClientGet(String userName, String userPass) {
 92
 93         AsyncHttpClient client = new AsyncHttpClient();
 94         //String url = "http://www.baidu.com";
 95         String url = "http://10.0.1.72:8080/MyDemo/login?";
 96
 97         RequestParams params =  new RequestParams();
 98         params.put("username",userName);
 99         params.put("userpass",userPass);
100
101         client.get(url, params, new AsyncHttpResponseHandler() {
102             @Override
103             public void onSuccess(int i, Header[] headers, byte[] bytes) {
104
105                 Log.d("请求响应码",i+"");
106                 for (int ii = 0; ii < headers.length;ii++){
107                     Header header = headers[ii];
108                     Log.d("values","header name:"+header.getName()+" value:"+header.getValue());
109                 }
110                 tv_result.setText(new String(bytes));
111             }
112
113             @Override
114             public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {
115                 throwable.printStackTrace();
116             }
117         });
118     }
119
120 }

  上面代码53行和54行依次进行测试。

  在AndroidManifest.xml中要加入网络访问授权,具体代码如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.app.logindemo" >
 4     <!--网络授权-->
 5     <uses-permission android:name="android.permission.INTERNET"/>
 6
 7     <application
 8         android:allowBackup="true"
 9         android:icon="@mipmap/ic_launcher"
10         android:label="@string/app_name"
11         android:theme="@style/AppTheme" >
12         <activity
13             android:name=".MainActivity"
14             android:label="@string/app_name" >
15             <intent-filter>
16                 <action android:name="android.intent.action.MAIN" />
17
18                 <category android:name="android.intent.category.LAUNCHER" />
19             </intent-filter>
20         </activity>
21     </application>
22
23 </manifest>

  所有代码都完成后启动模拟器会跳转到上图界面:

  不输入用户名和密码,则会提示“用户名或密码不能为空”

  随便输入一个用户名和密码,点击登陆会提示:

  同时在MyECLipse中Console会打印:

  这是post请求

  sdfdsf sdfdfs

  输入正确的用户名clear和密码123456,则界面会显示:

   

  这样就实现了android客户端与服务端的数据交互,是不是很开心。

  在此注意一定要进行网络授权,否则会报错且访问不了服务器。      

转载于:https://www.cnblogs.com/clear5/p/4564072.html

android-async-http框架之与服务器进行数据交互相关推荐

  1. Android客户端与后台服务器的数据交互

    Android客户端与服务器的数据交互 这是今年7月份时在一家公司实训时自己做的一个小项目,仅仅是一个简单的模拟Android客户端与服务器的数据交互,中间会有串口通信,以及利用JDBC连接Mysql ...

  2. 前端笔记知识点整合之服务器Ajax(上)服务器PHP数据交互HTTP

    前端笔记知识点整合之服务器&Ajax(上)服务器&PHP&数据交互&HTTP 一.服务器 1.1 什么是服务器,做什么的? 服务器,就是放在机房中的电脑,和我们的电脑的 ...

  3. (转载)Android项目实战(二十七):数据交互(信息编辑)填写总结

    Android项目实战(二十七):数据交互(信息编辑)填写总结 前言: 项目中必定用到的数据填写需求.比如修改用户名的文字编辑对话框,修改生日的日期选择对话框等等.现总结一下,方便以后使用. 注: 先 ...

  4. 微信小程序连接emqx服务器实现数据交互

    微信小程序连接emqx服务器实现数据交互 emqx 申请链接 EMQX 是一款全球下载量超千万的开源物联网MQTT 服务器,高效可靠连接海量物联网设备,高性能实时处理消息与事件流数据,可运行在公有云. ...

  5. Android 架构之路 (1)-- Android 客户端与服务器的数据交互总结

    前言: 本文总结了 Android 客户端与服务器进行交互时,采用RESTful API +Json的交互方式,针对不同的数据形式以及不同的解析方法,如有不足之处,欢迎指正. 文章目录 1. Andr ...

  6. 前端笔记之服务器Ajax(上)服务器PHP数据交互HTTP

    一.服务器 1.1 什么是服务器,做什么的? 服务器,就是放在机房中的电脑,和我们的电脑的区别在与服务器有固定的IP,服务器的安全性和稳定性相当的高;性能一般就可以了,但是CPU的性能要比普通的客户机 ...

  7. 客户端与服务器的数据交互

    毕设需要接粗到一些关于app和前端后端的东西,学习记录一下. 首先不要管安卓端还是苹果端,现在一般都是响应式的app,放到安卓或者苹果或者pc或者平板都是没有问题的.一般采用的是http接口通讯,或者 ...

  8. Android前端通过Http协议与J2EE后端数据交互。工具eclipse、MySQL、Tomcat。通过JoSn获取数据。Android端实现对MySQL增删改查功能。

    Android:目录 HttpThread.java package com.example.saads; import java.io.BufferedReader; import java.io. ...

  9. Android项目实战(二十七):数据交互(信息编辑)填写总结

    前言: 项目中必定用到的数据填写需求.比如修改用户名的文字编辑对话框,修改生日的日期选择对话框等等.现总结一下,方便以后使用. 注: 先写实现过程,想要学习的同学可以看看,不需要的同学可以直接拉到最下 ...

最新文章

  1. python 装饰器的妙用,实现类属性的懒加载
  2. 【论文解读】​YOLOX: Exceeding YOLO Series in 2021
  3. php短信接口加密_PHP短信接口、PHP短信验证码接口源码
  4. 301 302区别_如何正确理解301,302和canonial标签
  5. 某计算机公司的库存管理,《管理系统中计算机应用》应用题数据流程图汇总题及参考答案...
  6. 调整HashMap的大小:未来的危险
  7. Linux 简单的shell实现
  8. iOS开发UI调试神器----Reveal
  9. datagridview滚动条自动滚动_一个自适应滚动条的实现
  10. RabbitMQ 集群原理和完善
  11. lammps建模_lammps建模方法,即生成data文件
  12. 开源软件修改的必要性
  13. 阿里巴巴20周年直击,马云:阿里巴巴从来没有害怕过什么!
  14. #2020 UI/UX设计趋势
  15. JS实现闪烁星空效果
  16. 2019多校第一场 HDU6578 - Blank(DP,思维,滚动数组优化空间)
  17. 2019年研究生入学考试北京理工大学计算机专业基础813真题回忆
  18. 飞飞CMS最新版本DC04电脑端网站模板
  19. 研究生复试核心竞争力:编程(加分项)
  20. Mvc请求的生命周期

热门文章

  1. LayUI数据表格复选框显示不居中问题
  2. Nginx启动报[10013]错误
  3. java 编译环境不一致_安装多JDK后,java编译环境和运行环境版本(JDK版本) 不一致解决:...
  4. php团队规范,PHP团队 编码规范 代码样式风格规范
  5. JAVA→HashMap、常用方法、遍历方式、底层原理、初始化性能分析
  6. 第八章节 文件操作一 (文件对话框)
  7. IntelliJ IDEA导入maven项目
  8. bzoj 2844: albus就是要第一个出场(线性基)
  9. bzoj 4318: OSU!(概率DP)
  10. uuid和python中的uuid.py的使用教程