最近做了个Android请求获取Java后端数据的例子,简单实现了一下。


先上个登录界面图:Android请求获取Java后端数据,登录界面例子_第1张图片   Android请求获取Java后端数据,登录界面例子_第2张图片

登录界面使用 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

LoginServletcom.gxzj.login.LoginServletLoginServlet/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后端数据,登录界面例子



 

更多相关文章

  1. android ListView没有数据时信息显示
  2. Android应用程序与SurfaceFlinger服务之间的共享UI元数据(SharedC
  3. Android向服务器传接和接收数据的方法汇总
  4. Android基本操作1(意图使用、界面转换、按键操作、文本传递)
  5. 【iOS-Android开发对比】之 数据存储
  6. (一)Android数据结构学习之链表
  7. Android 应用程序界面设计建议
  8. Android中sqlite数据库的简单使用

随机推荐

  1. github前100名的android开源库
  2. 《Android》Lesson11-UI布局
  3. Android(安卓)原生GPS定位 判断室内室外
  4. Android回音噪音处理Demo
  5. 关于Android(安卓)6.0及以上版本用Pendin
  6. activity的启动过程分析
  7. Android(安卓)开发中遇到的 Exception &
  8. [置顶] Android(安卓)app内存管理的16点
  9. Android(安卓)之 下拉(Spinner) 组件示例
  10. ActionBarSherlock的学习笔记(四) --------