android与server端servlet交互
16lz
2021-01-23
一个关于android与server端servlet交互的demo,比项目中的例子要简单很多。
入门的朋友可以参考下。
核心代码:
/** * * 项目名称 JSONDemo * 包 名 servlet * 文 件 名 CustomerServlet.java * 开 发 人 Administrator * 描述信息 客户端验证用户登陆Servlet * 发布日期 2012-4-6下午03:28:47 * 修改日期 * 修 改 人 * 版本信息 V1.0 * */public class CustomerServlet extends HttpServlet {private static final long serialVersionUID = 314719472293387358L;@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//登陆成功标志String LOGIN_FLAG="";//获得客户端提交用户名密码String username = req.getParameter("username");String password = req.getParameter("password");//调用UserDAO中isLogin方法判断数据中用户名密码是否正确boolean flag=UserDAO.isLogin(username, password);try {DataOutputStream output=new DataOutputStream(resp.getOutputStream());if (flag) {LOGIN_FLAG="success";output.writeUTF("服务器端数据:"+LOGIN_FLAG); System.out.println(LOGIN_FLAG);output.writeInt(1); output.close(); }else{ //登录失败 LOGIN_FLAG="failure";System.out.println(LOGIN_FLAG);output.writeUTF("服务器端数据:"+LOGIN_FLAG);output.close(); }} catch (Exception e) {e.printStackTrace();}}}
ClientDemo 核心代码:
public class MainActivity extends Activity {//private static final int REQUEST_CODE = 2; HttpPost httpRequest=new HttpPost(UriAPI.HTTPCustomer); EditText et_name; EditText et_pwd; TextView show_login;Button btn_login;Button btn_cancle;ProgressDialog progressDialog; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //初始化登陆界面 btn_login=(Button) findViewById(R.id.btn_login); btn_cancle=(Button) findViewById(R.id.btn_cancle); et_name=(EditText) findViewById(R.id.et_name); et_pwd = (EditText) findViewById(R.id.et_pwd); show_login=(TextView) findViewById(R.id.show_login); progressDialog = new ProgressDialog(this); btn_login.setOnClickListener(new OnClickListener() {@SuppressWarnings("unchecked")@Overridepublic void onClick(View v) {//通过AsyncTask类提交数据 异步显示new AT().execute(et_name.getText().toString(),et_pwd.getText().toString());}}); } public class UriAPI { /** 定义一个Uri **/ public static final String HTTPCustomer ="http://10.0.1.9:8026/JSONDemo/servlet/CustomerServlet"; } @SuppressWarnings("rawtypes")class AT extends AsyncTask{ String result=""; @Override protected void onPreExecute() { //加载progressDialog progressDialog.show(); } @Overrideprotected Object doInBackground(Object... params_obj) {CharSequence username="";CharSequence password="";username=et_name.getText();password =et_pwd.getText();if(!username.equals("")&&!password.equals("")){//请求数据HttpPost httpRequest = new HttpPost(UriAPI.HTTPCustomer);//创建参数 List params=new ArrayList(); params.add(new BasicNameValuePair("username", username.toString())); params.add(new BasicNameValuePair("password", password.toString())); //params.add(new BasicNameValuePair("flag","0")); try { //对提交数据进行编码httpRequest.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));HttpResponse httpResponse=new DefaultHttpClient().execute(httpRequest);//获取响应服务器的数据if (httpResponse.getStatusLine().getStatusCode()==200) {//利用字节数组流和包装的绑定数据byte[] data =new byte[2048];//先把从服务端来的数据转化成字节数组data =EntityUtils. toByteArray((HttpEntity)httpResponse.getEntity()); //再创建字节数组输入流对象 ByteArrayInputStream bais = new ByteArrayInputStream(data); //绑定字节流和数据包装流 DataInputStream dis = new DataInputStream(bais); //将字节数组中的数据还原成原来的各种数据类型,代码如下: result=new String(dis.readUTF()); Log.i("服务器返回信息:", result);}} catch(ClientProtocolException e){ e.printStackTrace(); }catch(UnsupportedEncodingException e){ e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }return result;} @Override protected void onPostExecute(Object result) { //获得服务器返回信息成功后 show_login.setText(result.toString()); //取消进度条 progressDialog.cancel(); } } }
界面截图
1.未登录
2.登陆中
3.登陆成功
4.登陆失败
更多相关文章
- 360buy android 首页打开网络监控数据分析
- Android 学生管理系统 之 SQLite数据库操作
- Android客户端和服务器端数据交互的第四种方法
- Android多媒体数据库详解
- Android SQLite 数据库的使用
- android异步任务加载数据界面实现
- Android(四)数据存储之四 (转)