Android与web后台进行数据交互的三种方式
2017-07-28 00:54
513 查看
无论是用哪种方式使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(); // } @Override protected 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"?& 4000 gt; <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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取用户名的iduname = (EditText) findViewById(R.id.uname);//获取密码的idupass = (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 {@Overrideprotected 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;}@Overrideprotected 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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取用户名的iduname = (EditText) findViewById(R.id.uname);//获取密码的idupass = (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 {@Overrideprotected 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;}@Overrideprotected 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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);//获取用户名的iduname = (EditText) findViewById(R.id.uname);//获取密码的idupass = (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{@Overrideprotected 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;}@Overrideprotected 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 25 buildToolsVersion "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); // 94b5 Toast.makeText(MainActivity.this, responseBody, Toast.LENGTH_SHORT).show(); // } // }); } }
我在运行的时候总是吐司不出东西,原因是因为我没有连局网
相关文章推荐
- 引用第三方进行Android前端与web后台的数据交互
- Android与web后台进行数据交互
- Android客户端采用Http 协议Post方式请求与服务端进行数据交互
- 多种方式实现JS调用后台方法进行数据交互
- web 前后台数据交互的方式
- Android中WebView的JavaScript代码和本地代码交互的三种方式
- 三种方式使得iOS应用能够在后台进行数据更新和下载
- Android客户端采用Http 协议Post方式请求与服务端进行数据交互(转)
- 混合开发之webView加载html,android 和 html之间进行数据交互
- web前端后台数据的交互方式总结
- Android客户端采用Http 协议Post方式请求与服务端进行数据交互
- Android中WebView的JavaScript代码和本地代码交互的三种方式
- 多种方式实现JS调用后台方法进行数据交互
- web前后台数据交互的几种方式
- 三种方式使得iOS应用能够在后台进行数据更新和下载
- Android客户端采用Http 协议Post方式请求与服务端进行数据交互
- web 前后台数据交互的方式
- Android与web服务器数据交互编程---3网络爬虫项目实现虚拟浏览器的jsp后台运行
- Android中WebView的JavaScript代码和本地代码交互的三种方式
- PHP后台数据处理及与web端进行数据交互