Android请求获取Java后端数据,登录界面例子
16lz
2021-01-23
最近做了个Android请求获取Java后端数据的例子,简单实现了一下。
先上个登录界面图:
登录界面使用 http://blog.csdn.net/u012964281/article/details/40625967 ,有点小改动。
源代码下载:Android请求获取Java后端数据,登录界面例子
主要实现:
java后端的代码 + Android的代码
1、java后端
(1)、先创个User类
import net.sf.json.JSONObject;public class User {private long userid;private String account; private String username; private String passwd; public User(long userid, String account, String username, String passwd) { this.userid = userid; this.account = account; this.username = username; this.passwd = passwd; } public static User json2novel (JSONObject json) { try { return new User(json.getLong("userid"), json.getString("account"), json.getString("username"), json.getString("passwd") ); }catch (Exception ex) { ex.printStackTrace(); } return null; } public long getUserid() {return userid;}public void setUserid(long userid) {this.userid = userid;}public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPasswd() {return passwd;}public void setPasswd(String passwd) {this.passwd = passwd;} }
(2)、建个LoginServlet(public class LoginServlet extends HttpServlet)
import java.io.IOException;import java.io.PrintWriter;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import net.sf.json.JSONObject;public class LoginServlet extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");JSONObject json = new JSONObject();List list = new ArrayList<>();User user = new User(1,"sa","sa","123");list.add(user);json.put("data", list);PrintWriter out = response.getWriter();out.write(json.toString());//返回json数据}}
(3)、建个跨域过滤器CorsFilter(public class CorsFilter implements Filter)
import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletResponse;public class CorsFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {HttpServletResponse res = (HttpServletResponse) response;res.setContentType("text/html;charset=UTF-8");res.setHeader("Access-Control-Allow-Origin", "*");//"*"所有域名可访问res.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");res.setHeader("Access-Control-Max-Age", "0");res.setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token");res.setHeader("Access-Control-Allow-Credentials", "true");res.setHeader("XDomainRequestAllowed", "1");chain.doFilter(request, response);}@Overridepublic void init(FilterConfig config) throws ServletException {}@Overridepublic void destroy() {}}
(4)、配置一下web.xml
LoginServlet com.gxzj.login.LoginServlet LoginServlet /LoginServlet cors com.gxzj.login.CorsFilter cors /*
2、Android代码
(1)、写个登录界面xml
<?xml version="1.0" encoding="utf-8"?>
(2)、再写点 LoginActivity代码
请求网络数据需要权限,在manifest添加权限:
<uses-permission android:name="android.permission.INTERNET" />
这里使用了 AsyncHttpClient 来请求 java后端 的数据
要在build里添加:
compile 'com.loopj.android:android-async-http:1.4.9'
import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import com.loopj.android.http.AsyncHttpClient;import com.loopj.android.http.AsyncHttpResponseHandler;import org.json.JSONArray;import org.json.JSONObject;import java.util.ArrayList;import java.util.List;import cz.msebera.android.httpclient.Header;public class LoginActivity extends AppCompatActivity { AsyncHttpClient client;//异步加载 List ls_user = null; Button btn_login; EditText login_edtId,login_edtPwd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); client = new AsyncHttpClient();//实例化AsyncHttpClient btn_login = (Button) findViewById(R.id.btn_login); login_edtId = (EditText) findViewById(R.id.login_edtId); login_edtPwd = (EditText) findViewById(R.id.login_edtPwd); btn_login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String account = login_edtId.getText().toString().trim(); String passwd = login_edtPwd.getText().toString().trim(); if(account.equals("")){ Toast.makeText(LoginActivity.this, "请输入用户名", Toast.LENGTH_SHORT).show(); }else if(passwd.equals("")){ Toast.makeText(LoginActivity.this, "请输入密码", Toast.LENGTH_SHORT).show(); }else{ //这里的IP(192.168.43.234:8080)要换成你自己的IP !!! String url = "http://192.168.3.126:8080/Cors/LoginServlet?account=" + account + "&passwd=" + passwd; ls_user = new ArrayList<>();//初始化 client.get(url, new AsyncHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { try { JSONObject jsonObject = new JSONObject(new String(responseBody)); JSONArray jsonArray = jsonObject.getJSONArray("data"); for (int i=0; i
(3)、MainActivity就直接创建一个空Activity
(4)、建个User类
import org.json.JSONException;import org.json.JSONObject;public class User { private long userid; private String account; private String username; private String passwd; public User(long userid, String account, String username, String passwd) { this.userid = userid; this.account = account; this.username = username; this.passwd = passwd; } public static User json2novel (JSONObject json) { try { return new User(json.getLong("userid"), json.getString("account"), json.getString("username"), json.getString("passwd") ); }catch (JSONException e) { e.printStackTrace(); } return null; }}
以前觉得一个项目访问另外一个项目资源是需要跨域的,是没弄懂跨域的概念,跨域:
什么是跨域?
关于跨域,以及跨域的几种方式
Android请求获取Java后端数据,登录界面例子
更多相关文章
- android ListView没有数据时信息显示
- Android应用程序与SurfaceFlinger服务之间的共享UI元数据(SharedC
- Android向服务器传接和接收数据的方法汇总
- Android基本操作1(意图使用、界面转换、按键操作、文本传递)
- 【iOS-Android开发对比】之 数据存储
- (一)Android数据结构学习之链表
- Android 应用程序界面设计建议
- Android中sqlite数据库的简单使用