Java实现app接口和Socket消息传递(10)java连接MySQL实现App登录接口

原创: http://blog.csdn.net/iwanghang


1.先来个Androiod端口的GIF效果图

App图标大家可能没看清,这个是AndroidStudio3.0最新的默认App图标哦~~


2.不要忘记把MySQL的jar导进来

如果忘了jar怎么下载,请看这里:http://blog.csdn.net/iwanghang/article/details/78489898

jar包放入的位置在这里:
D:\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\servletDemo\WEB-INF\lib


3.Server端代码

package com.iwanghang.servletDemo;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class Test01 implements Servlet{
	
	private String username; // 请求参数中的username
	private String password; // 请求参数中的password
	private String passwordSql; // 数据库中的password
	private String islogin; //返回参数是否登录成功
	
	public Test01() {
		System.out.println("HelloServlet...");
	}

	@Override
	public void destroy() {
		System.out.println("destroy...");
	}

	@Override
	public ServletConfig getServletConfig() {
		System.out.println("getServletConfig...");
		return null;
	}

	@Override
	public String getServletInfo() {
		System.out.println("getServletInfo...");
		return null;
	}

	@Override
	public void init(ServletConfig arg0) throws ServletException {
		System.out.println("init...");
	}

	@Override
	public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
		System.out.println("service...");
		
		// 获取请求参数
		username = request.getParameter("username");
		password = request.getParameter("password");
		System.out.println("获取请求参数 username = " + username);
		System.out.println("获取请求参数 password = " + password);
		
		// 在MySQL中,用username查找对应的password
        try {    
            Class.forName("com.mysql.jdbc.Driver");//创建驱动器   
            // 写法1. 这样写会有警告,但是不影响使用  
            // Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql","root","123456");//这是数据库的路径,并且还有输入账号(一般默认是root),密码之前创建用户时的那个    
            // 写法2. 看起来比较复杂,但是没有警告  
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo1113?useUnicode=true&characterEncoding=utf-8&useSSL=false","root", "123456");  
            PreparedStatement pst=con.prepareCall("select * from aaa_user where username = '" + username + "'");//输入的是要在MySQL中执行的代码    
            ResultSet rs=pst.executeQuery();//获得执行上面代码后的结果集    
            while(rs.next()){    
            	passwordSql = rs.getString("password");  
	            } // 最后还有关闭连接    
            }     
        catch (ClassNotFoundException ex) {    
        	Logger.getLogger(Test01.class.getName()).log(Level.SEVERE, null, ex);    
	    } catch (SQLException ex) {    
	        Logger.getLogger(Test01.class.getName()).log(Level.SEVERE, null, ex);    
	    }    
		
        // 对比数据库中的password,与请求参数中的password,是否一致
        if (passwordSql.equals(password)){ // 如果相同
        	islogin = "yes"; 
        }else{	// 如果不同
        	islogin = "no";
        };
        System.out.println("islogin = " + islogin); 
        
        
		response.setCharacterEncoding("UTF-8");
		response.setContentType("application/json; charset=utf-8");
//		String jsonStr = "{\"username\":\"王航\""
//				+ ",\"password\":\"987654\""
//				+ ",\"status\":\"1\"}";
		String jsonStr = "{\"islogin\":\""+islogin+"\"}";
		PrintWriter out = null;
		try {
		    out = response.getWriter();
		    out.write(jsonStr);
		} catch (IOException e) {
		    e.printStackTrace();
		} finally {
		    if (out != null) {
		        out.close();
		    }
		}
	}

}
4.Server端控制台调试信息

5.Android端代码

package com.iwanghang.demo1113;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;

import static com.iwanghang.demo1113.Constant.LOGINCHECK;

public class MainActivity extends AppCompatActivity {
    private String TAG = "MainActivity";
    // 创建请求队列
    RequestQueue requestQueue = null;

    private EditText et_username;
    private EditText et_password;
    private Button bt_login;

    private String username;
    private String password;
    private String status;
    private String islogin;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        requestQueue = Volley.newRequestQueue(this);

        et_username = findViewById(R.id.et_username);
        et_password = findViewById(R.id.et_password);
        bt_login = findViewById(R.id.bt_login);

        initLogin(); // 登录 按钮点击事件监听
    }

    /**
     * 登录 按钮点击事件监听
     */
    private void initLogin() {
        bt_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 获取输入账号密码
                username = et_username.getText().toString();
                password = et_password.getText().toString();
                Log.v(TAG, " username = " + username);
                netLogin(); // 发送网络请求
            }
        });
    }

    /**
     * 发送网络请求 尝试登陆
     */
    private void netLogin() {
        // 请求地址
        //String url = "hhttp://192.168.1.129:8080/servletDemo/test01";
        StringRequest request = new StringRequest(Request.Method.POST, LOGINCHECK, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.v(TAG,"response = " + response);// 返回结果

                try {
                    if (response.equals("no")){
                        Toast.makeText(MainActivity.this, "登录失败,请检查ID是否正确", Toast.LENGTH_SHORT).show();
                    }else {
                        JSONObject object1 = new JSONObject(response);
                        islogin = object1.getString("islogin"); // islogin
                        Log.e("TAG", "islogin = " + islogin);
                        Toast.makeText(MainActivity.this, "islogin = " + islogin, Toast.LENGTH_SHORT).show();
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.v(TAG,"error = " + error); // 错误结果
                Toast.makeText(getApplication(),"网络出问题",Toast.LENGTH_SHORT).show();
            }
        }){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                // 请求的内容
                Map<String,String> params = new HashMap<>();
                params.put("username",username);
                params.put("password",password);
                return params;
            }
        };
        // 添加到请求队列
        requestQueue.add(request);
    }
}
6.Android端就不贴控制台调试信息了,小伙伴们不要忘了Volley的jar包

如果忘了,看看这里也可以:http://blog.csdn.net/column/details/12824.html


原创: http://blog.csdn.net/iwanghang
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值