主要用到:1.DBUtil 类,连接数据库的代码都在里边。
2. libs中的.jar包,着着非常重要,很多人忘记导入相应jar包导致找不到资源啥的。
3. AndroidManifest.xml中加权限
记得在AndroidManifest.xml中加入socket权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2,3步不懂得可以参考:https://blog.csdn.net/na2609613672/article/details/82222795
DBUtil 类代码:
package com.monitorsys.seashell.myapp;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBUtil
{
private String name=null;
private String pass=null;
public DBUtil(String m,String p){
this.name=m;
this.pass=p;
}
private static Connection getSQLConnection(String ip, String user, String pwd, String db)
{
Connection con = null;
try
{
Class.forName("net.sourceforge.jtds.jdbc.Driver");
con = DriverManager.getConnection("jdbc:jtds:sqlserver://" + ip + ":1433/" + db + ";charset=utf8", user, pwd);
} catch (ClassNotFoundException e)
{
e.printStackTrace();
} catch (SQLException e)
{
e.printStackTrace();
}
return con;
}
public String QuerySQL()
{
String result = "";
try
{
Connection conn= getSQLConnection("数据库地址", "用户名", "密码", "数据库名");//根据自己的数据库信息填写对应的值
String sql = "select username from userinfo where userpwd=? and username=? ";
PreparedStatement stat = conn.prepareStatement(sql);
stat.setString(1, pass);
stat.setString(2, name);
ResultSet rs = stat.executeQuery();
while (rs.next())
{
result= "1" ;
}
rs.close();
conn.close();
} catch (SQLException e)
{
e.printStackTrace();
result += "查询数据异常!" + e.getMessage();
}
return result;
}
public static void main(String[] args)
{
}
}
LoginActivity代码:
1.主要看登陆,其他都是自动生成的
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mEmailView = (AutoCompleteTextView) findViewById(R.id.email);//1.用户
populateAutoComplete();//动态获取PERMISSION_GRANTED(通讯录权限)
mPasswordView = (EditText) findViewById(R.id.password);//2.密码
//setOnEditorActionListener:编辑完之后点击软键盘上的回车键才会触发
mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {//当用户处在输入密码编辑框,软键盘打开,输入确定按钮(EditorInfo.IME_NUL)时尝试登录
// 按下完成按钮,这里IME_ACTION_DONE和.xml中imeOptions对应
if (id == EditorInfo.IME_ACTION_DONE || id == EditorInfo.IME_NULL) {
attemptLogin();
return true;//返回true,保留软键盘。false,隐藏软键盘
}
return false;
}
});
//3.登陆(看这里>>>>>>>>>>
Button mEmailSignInButton = (Button) findViewById(R.id.email_sign_in_button);//找到按钮
mEmailSignInButton.setOnClickListener(this.LoginInButtonlistener);//绑定监听器
WorkThread wt=new WorkThread();
wt.start();//调动子线程
//看到这就可以了>>>>>>>>>
mLoginFormView = findViewById(R.id.login_form);//滑动视图
mProgressView = findViewById(R.id.login_progress);//进度条
}
2.点击登陆按钮后,触动监听器:
private View mProgressView;
private View mLoginFormView;
//按钮监听器
View.OnClickListener LoginInButtonlistener = new View.OnClickListener()
{
public void onClick(View view) {
String s= mPasswordView.getText().toString();//获取页面密码
String sy=mEmailView.getText().toString();//获取页面用户名
Message m=handler.obtainMessage();//获取事件
Bundle b=new Bundle();
b.putString("pass",s);//以键值对形式放进 Bundle中
b.putString("name",sy);
m.setData(b);
handler.sendMessage(m);//把信息放到通道中
}
};
3.信息放到通道中 ,有信息后,looper工作,调用Handler中的handleMessage
class WorkThread extends Thread{
@Override
public void run(){
Looper.prepare();
handler=new Handler(){
@Override
public void handleMessage(Message m){
super.handleMessage(m);
Bundle b= m.getData();//得到与信息对用的Bundle
String name=b.getString("name");//根据键取值
String pass=b.getString("pass");
DBUtil db=new DBUtil(name,pass);//调用数据库查询类
String ret=db.QuerySQL();//得到返回值
if (ret.equals("1"))//为1,页面跳转,登陆成功
{
Intent localIntent = new Intent();
localIntent.setClass(LoginActivity.this, SelectActivity.class);
LoginActivity.this.startActivity(localIntent);
Toast.makeText(LoginActivity.this, "登录成功",Toast.LENGTH_SHORT).show();//显示提示框
return;
}
Toast.makeText(LoginActivity.this, "用户名或密码错误", Toast.LENGTH_SHORT).show();
}
};
Looper.loop();//Looper循环,通道中有数据执行,无数据堵塞
}
}
登录页面:
因为很多网友源码,之前的找不到了,我又重新写了一个,页面设置有一点不同但逻辑相同,希望能帮助你们呢
百度网盘:https://pan.baidu.com/s/1PCNxogsp_txrVKQjKSjGeQ
密码:egqx
注:如果你的gradle版本和我的不一样导致下载的代码不能运行,可看我另一篇代码可以解决这个问题https://blog.csdn.net/na2609613672/article/details/89086952
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有