最近由于需要以android为前端,数据库选择sqlserver,后台我选择了php(虽然我没学过php)。
不说了,直接上图上代码。
布局界面有点难看,你们可以自己排版,这里就不贴出布局代码了。
这个登陆的前提是你的数据库要有对应的账号和密码,响应的部分也要对应。
直接说思路:输入账号,密码,点击登陆按钮,然后访问后台php,后台会对前端传来的参数数据进行判断,查询sqlserver数据库是否含有这个用户和密码。如果有,返回信息给客户端,客户端进入主界面。
下面贴上主要代码
mLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Thread(new Runnable() {
@Override
public void run() {
try {
int result = login();
//login()为向php服务器提交请求的函数,返回数据类型为int
if (result == 1) {
Log.e("log_tag", "登陆成功!");
//Toast toast=null;
Looper.prepare();
Intent intent=new Intent(LoginActivity.this,MainActivity.class);
startActivity(intent);
finish();
Looper.loop();
} else if (result == -2) {
Log.e("log_tag", "密码错误!");
//Toast toast=null;
Looper.prepare();
Toast.makeText(LoginActivity.this, "密码错误!", Toast.LENGTH_SHORT).show();
Looper.loop();
} else if (result == -1) {
Log.e("log_tag", "不存在该用户!");
//Toast toast=null;
Looper.prepare();
Toast.makeText(LoginActivity.this, "不存在该用户!", Toast.LENGTH_SHORT).show();
Looper.loop();
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}).start();
}
});
}
private int login() throws IOException {
int returnResult=0;
/*获取用户名和密码*/
String username=mUser.getText().toString();
String password=mPassword.getText().toString();
if(username==null||username.length()<=0){
Looper.prepare();
Toast.makeText(LoginActivity.this,"请输入账号", Toast.LENGTH_LONG).show();
Looper.loop();
return 0;
}
if(password==null||password.length()<=0){
Looper.prepare();
Toast.makeText(LoginActivity.this,"请输入密码", Toast.LENGTH_LONG).show();
Looper.loop();
return 0;
}
String urlstr="http://服务器域名ip/后台php项目名/login.php";
//建立网络连接
URL url = new URL(urlstr);
HttpURLConnection http= (HttpURLConnection) url.openConnection();
//往网页写入POST数据,和网页POST方法类似,参数间用‘&’连接
String params="username="+username+'&'+"password="+password+'&'+"department="+department;
http.setDoOutput(true);
http.setRequestMethod("POST");
OutputStream out=http.getOutputStream();
out.write(params.getBytes());//post提交参数
out.flush();
out.close();
//读取网页返回的数据
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(http.getInputStream()));//获得输入流
String line="";
StringBuilder sb=new StringBuilder();//建立输入缓冲区
while (null!=(line=bufferedReader.readLine())){//结束会读入一个null值
sb.append(line);//写缓冲区
}
String result= sb.toString();//返回结果
try {
/*获取服务器返回的JSON数据*/
Log.i("ddd",result);
JSONObject jsonObject= new JSONObject(result);
returnResult=jsonObject.getInt("status");//获取JSON数据中status字段值
} catch (Exception e) {
// TODO: handle exception
Log.e("log_tag", "the Error parsing data "+e.toString());
}
return returnResult;
}
下面是服务器端代码
<?php
/*
*用户登录,服务器进行的处理
*/
include("conn.php");
$username=iconv("UTF-8", "GBK//IGNORE",$_POST['username']);
$password=$_POST['password'];//客户端post过来的密码
$department=iconv("UTF-8", "GBK//IGNORE",$_POST['department']);
$sql=sqlsrv_query($conn,"SELECT * FROM [数据库名].[dbo].[表名] WHERE username ='$username'");
if(!empty($sql)){
$result=sqlsrv_fetch_array($sql);
}
if(!empty($result)) {
//存在该用户
if ($password == $result['password']) {
if ($department == $result['department']) {
/*这里的数组不需要加单引号*/
$back['status'] = '1';
$back['info'] = "login success";
echo(json_encode($back));
} else {
$back['status'] = '-2';
$back['info'] = "department error";
echo(json_encode($back));
}
} else{/*密码错误*/
$back['status'] = '-2';
$back['info'] = "password error";
echo(json_encode($back));
}
} else {
//不存在该用户
$back['status'] = '-1';
$back['info'] = "user not exist";
echo(json_encode($back));
}
sqlsrv_close($conn);
?>
$username=iconv("UTF-8", "GBK//IGNORE",$_POST['username']);
像这段代码,因为有时用户名是中文,如果直接传到数据库,会出现乱码问题,因为android的默认编码是utf-8,php的编码可设置成utf-8,但是sqlserver数据库的编码是gbk,我目前还不知道如何更改它的编码为utf-8,所以我直接在php后台utf-8转为gbk,这样就不会出现乱码。
sqlserver我也是第一次用,之前用的都是mysql,所以出现很多的问题,比如数据库名,表名为中文时都无法查询数据库的数据。如果有会的朋友请留言,非常感谢!!!