Android与web后台进行数据交互的三种方式
来源:互联网 发布:kmeans算法优缺点 编辑:程序博客网 时间:2024/05/29 02:39
无论是用哪种方式使Android与web后台进行数据交互,都需要在eclipes中写一个完整的操作流程,在这里,我是写了一个登录。(没有从数据库进行判断,而是直接把用户名和密码定死了),下面就是我的后台web端。你可以根据你的不同需求在jsp界面用你所需要的提交方式来写
login,jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><!-- <form action="login.do" method="get">用户名:<input type="text" name="uname"/><br>密码:<input type="password" name="upass"/><br><input type="submit" value="登录"/></form> --><form action="login.do" method="post">用户名:<input type="text" name="uname"/><br>密码:<input type="password" name="upass"/><br><input type="submit" value="登录"/></form></body></html>
LoginServlet:
package com.lxj.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class Login extends HttpServlet{//@Override//protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//String uname=req.getParameter("uname");//String upass=req.getParameter("upass");////String a=null;//if("admin".equals(uname) && "123".equals(upass)){//a="succes";//System.out.println(a);//}else{//a="fail";//System.out.println(a);//}//PrintWriter pw=resp.getWriter();//pw.write(a);//pw.close();//}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String uname=req.getParameter("uname");String upass=req.getParameter("upass");String a=null;if("admin".equals(uname) && "123".equals(upass)){a="succes";System.out.println(a);}else{a="fail";System.out.println(a);}PrintWriter pw=resp.getWriter();pw.write(a);pw.close();}}
最后,还要记得在web.xml里面配置跳转路径
<servlet> <servlet-name>login</servlet-name> <servlet-class>com.lxj.servlet.Login</servlet-class> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/login.do</url-pattern> </servlet-mapping>
第一:GET提交方式:
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.android_getandpost.MainActivity"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入用户名" android:id="@+id/uname" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入密码" android:id="@+id/upass" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="登陆(Get)" android:onClick="LoginGet" /></LinearLayout>
MainActivity:
package com.example.android_getandpost;import android.os.AsyncTask;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.EditText;import android.widget.Toast;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;public class MainActivity extends AppCompatActivity { private EditText uname; private EditText upass; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取用户名的id uname = (EditText) findViewById(R.id.uname); //获取密码的id upass = (EditText) findViewById(R.id.upass); } public void LoginGet(View view){ //获取用户名的值 String name=uname.getText().toString(); //获取密码的值 String pass=upass.getText().toString(); //获取网络上的servlet路径 String path="http://193.168.3.16:8080/Login/login.do"; //调用getTask,把获取到的用户名,密码与路径放入方法中 new getTask().execute(name,pass,path); } class getTask extends AsyncTask { @Override protected Object doInBackground(Object[] params) { //依次获取用户名,密码与路径 String name = params[0].toString(); String pass = params[1].toString(); String path = params[2].toString(); try { //获取网络上get方式提交的整个路径 URL url = new URL(path + "?uname=" + name + "&upass=" + pass); //打开网络连接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //设置提交方式 conn.setRequestMethod("GET"); //设置网络超时时间 conn.setConnectTimeout(5000); //获取结果码 int code = conn.getResponseCode(); if (code == 200) { //用io流与web后台进行数据交互 InputStream is = conn.getInputStream(); //字节流转字符流 BufferedReader br = new BufferedReader(new InputStreamReader(is)); //读出每一行的数据 String s = br.readLine(); //返回读出的每一行的数据 return s; } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Object o) { super.onPostExecute(o); //获取Android studio与web后台数据交互获得的值 String s= (String) o; //吐司Android studio与web后台数据交互获得的值 Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show(); } }}
第二:POST提交方式:
activity_main2.xml:
package com.example.android_getandpost;import android.os.AsyncTask;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.EditText;import android.widget.Toast;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;public class MainActivity extends AppCompatActivity { private EditText uname; private EditText upass; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取用户名的id uname = (EditText) findViewById(R.id.uname); //获取密码的id upass = (EditText) findViewById(R.id.upass); } public void LoginGet(View view){ //获取用户名的值 String name=uname.getText().toString(); //获取密码的值 String pass=upass.getText().toString(); //获取网络上的servlet路径 String path="http://193.168.3.16:8080/Login/login.do"; //调用getTask,把获取到的用户名,密码与路径放入方法中 new getTask().execute(name,pass,path); } class getTask extends AsyncTask { @Override protected Object doInBackground(Object[] params) { //依次获取用户名,密码与路径 String name = params[0].toString(); String pass = params[1].toString(); String path = params[2].toString(); try { //获取网络上get方式提交的整个路径 URL url = new URL(path + "?uname=" + name + "&upass=" + pass); //打开网络连接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //设置提交方式 conn.setRequestMethod("GET"); //设置网络超时时间 conn.setConnectTimeout(5000); //获取结果码 int code = conn.getResponseCode(); if (code == 200) { //用io流与web后台进行数据交互 InputStream is = conn.getInputStream(); //字节流转字符流 BufferedReader br = new BufferedReader(new InputStreamReader(is)); //读出每一行的数据 String s = br.readLine(); //返回读出的每一行的数据 return s; } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Object o) { super.onPostExecute(o); //获取Android studio与web后台数据交互获得的值 String s= (String) o; //吐司Android studio与web后台数据交互获得的值 Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show(); } }}
Main2Activity:
package com.example.android_getandpost;import android.os.AsyncTask;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;import android.widget.Toast;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;public class Main2Activity extends AppCompatActivity { private EditText upass; private EditText uname; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); //获取用户名的id uname = (EditText) findViewById(R.id.uname); //获取密码的id upass = (EditText) findViewById(R.id.upass); } public void LoginPost(View view){ //获取用户名的值 String name=uname.getText().toString(); //获取密码的值 String pass=upass.getText().toString(); //获取网络上的servlet路径 String path="http://193.168.3.16:8080/Login/login.do"; //调用postTask,把获取到的用户名,密码与路径放入方法中 new postTask().execute(name,pass,path); } class postTask extends AsyncTask{ @Override protected Object doInBackground(Object[] params) { //依次获取用户名,密码与路径 String name=params[0].toString(); String pass=params[1].toString(); String path=params[2].toString(); try { //获取网络上get方式提交的整个路径 URL url=new URL(path); //打开网络连接 HttpURLConnection conn= (HttpURLConnection) url.openConnection(); //设置提交方式 conn.setRequestMethod("POST"); //设置网络超时时间 conn.setConnectTimeout(5000); //界面上所有的参数名加上他的值 String s="uname="+name+"&upass"+pass; //获取请求头 conn.setRequestProperty("Content-Length",s.length()+"");//键是固定的 conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");//键和值是固定的 //设置允许对外输出数据 conn.setDoOutput(true); //把界面上的所有数据写出去 OutputStream os=conn.getOutputStream(); os.write(s.getBytes()); if(conn.getResponseCode()==200){ //用io流与web后台进行数据交互 InputStream is=conn.getInputStream(); //字节流转字符流 BufferedReader br=new BufferedReader(new InputStreamReader(is)); //读出每一行的数据 String str=br.readLine(); //返回读出的每一行的数据 return str; } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Object o) { super.onPostExecute(o); //获取Android studio与web后台数据交互获得的值 String s= (String) o; //吐司Android studio与web后台数据交互获得的值 Toast.makeText(Main2Activity.this, s, Toast.LENGTH_SHORT).show(); } }}
第三:运用第三方(android-async-http-1.4.4.jar):
首先,在项目中把jar包导入libs,然后右击选择add as library解压,再在build.gradle中的
compileSdkVersion 25buildToolsVersion "25.0.2"上面加上这样一句代码:useLibrary 'org.apache.http.legacy',然后编译
以解决HttpClient导致不可以问题
activity_mian3.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.android_getandpost.Main3Activity"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入用户名" android:id="@+id/uname" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入密码" android:id="@+id/upass" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="登陆(AsyncHttpClient)" android:onClick="LoginAsyncHttpClient" /></LinearLayout>
Main3Activity:
package com.example.android_getandpost;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;import android.widget.Toast;import com.loopj.android.http.AsyncHttpClient;import com.loopj.android.http.RequestHandle;import com.loopj.android.http.RequestParams;import com.loopj.android.http.TextHttpResponseHandler;import org.apache.http.Header;public class Main3Activity extends AppCompatActivity { private EditText upass; private EditText uname; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main3); //获取用户名的id uname = (EditText) findViewById(R.id.uname); //获取密码的id upass = (EditText) findViewById(R.id.upass); } public void LoginAsyncHttpClient(View view){ //获取用户名的值 String name=uname.getText().toString(); //获取密码的值 String pass=upass.getText().toString(); //获取网络上的servlet路径 String path="http://193.168.3.16:8080/Login/login.do"; //使用第三方 AsyncHttpClient ahc=new AsyncHttpClient(); //请求参数 RequestParams params=new RequestParams(); //给请求参数设键和值(键的名字和web后台保持一致) params.put("name",name); params.put("pass",pass); //设值提交方式 ahc.post(this,path,params,new TextHttpResponseHandler(){ @Override public void onFailure(int statusCode, Header[] headers, String responseBody, Throwable error) { super.onFailure(statusCode, headers, responseBody, error); } @Override public void onSuccess(int statusCode, Header[] headers, String responseBody) { super.onSuccess(statusCode, headers, responseBody); //吐司Android studio与web后台数据交互获得的值 Toast.makeText(Main3Activity.this, responseBody, Toast.LENGTH_SHORT).show(); } });// @Override// public void onSuccess(int statusCode, Header[] headers, String responseBody) {// super.onSuccess(statusCode, headers, responseBody);// Toast.makeText(MainActivity.this, responseBody, Toast.LENGTH_SHORT).show();// }// }); }}我在运行的时候总是吐司不出东西,原因是因为我没有连局网
阅读全文
0 0
- Android与web后台进行数据交互的三种方式
- Android与web后台进行数据交互
- 引用第三方进行Android前端与web后台的数据交互
- PHP后台数据处理及与web端进行数据交互
- 安卓与后台进行数据交互
- 与后台交互选择的交互方式
- android客户端与服务端交互的三种方式
- android客户端与服务端交互的三种方式
- android客户端与服务端交互的三种方式
- android客户端与服务端交互的三种方式
- Android客户端与服务端交互的三种方式
- Android中与Service交互的三种方式
- android客户端与服务端交互的三种方式
- android与js交互的方式(包括三种)
- android通过HttpClient与web服务端进行数据交互
- web前端与后台数据交互--Json
- 浅谈web前端与后台数据交互
- web前端与后台数据交互
- 生产者和消费者
- 【HDU4405】Aeroplane chess
- Redis--(linux安装redis3.2.9--教程)
- Android开发之蓝牙(一)——基于SPP协议蓝牙模块通信
- php扩展研究之一(实现a+b)
- Android与web后台进行数据交互的三种方式
- 数据结构之顺序栈的一些基本操作
- 【转】数据库索引的实现原理
- CountDownLatch
- Mongodb从0到1系列八: 备份与恢复
- 设计模式---单例模式
- jsp 提交系列化表单到后台servlet接收中文乱码
- 学习笔记TF032:实现Google Inception Net
- 把activity文件转换成view实现画面切换