主要用到:1.DBUtil 类,连接数据库的代码都在里边。
2. libs中的.jar包,着着非常重要,很多人忘记导入相应jar包导致找不到资源啥的。
3. AndroidManifest.xml中加权限
记得在AndroidManifest.xml中加入socket权限:

   

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

更多相关文章

  1. Android学习笔记16:Button控件图文混排效果的实现
  2. android之activity跳转 窗口跳转
  3. SDK-IOS 关于SDK接入 MAC平台笔记
  4. android仿ios开关按钮
  5. Android(安卓)ADB命令大全(通过ADB命令查看wifi密码、MAC地址、
  6. Android编程: 界面组成、事件监听器
  7. Android应用开发基础篇(1)-----Button
  8. Android(安卓)Design Support Library——Floating Action Butto
  9. android之MediaPlay播放视频

随机推荐

  1. Fedora22 配置android的32库
  2. Android RecyclerView 的那些开源 Layout
  3. Android漂亮的Help提示框
  4. 在Android中使用Curl
  5. Glide 加载图片时大时小
  6. Android(安卓)属性
  7. android通用JSON解析
  8. Android 设置铃声
  9. android之网络请求框架OKhttp、原生http
  10. android升级数据库(Sqlite)简单示例