android连接数据库的方式有两种,第一种是通过连接服务器,再由服务器读取数据库来实现数据的增删改查,这也是我们常用的方式。第二种方式是android直接连接数据库,这种方式非常耗手机内存,而且容易被反编译造成安全隐患,所以在实际项目中不推荐使用。
本篇博文主要讲述安卓如何与访问远程PHP服务器上的MySQL数据库。
安卓客户端通过HTTP协议与远程服务器进行数据传输,使用Json来作为载体。
注意:
在安卓4.0之后不允许在主线程进行比较耗时的操作,所以要另开一个线程来连接服务器并传输数据。
下面为访问服务器上checkadmin.php的代码,在该线程中将account与loginword以键值对的方式发送给远程服务器,然后接收服务器返回的Json数据格式的isSuccess布尔类型数据,完成登录验证。
private class RequestThread_admin implements Runnable {
@SuppressWarnings("unchecked")
public void run() {
HttpClient httpClient = new DefaultHttpClient();
httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5000);//设置链接超时
httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000); //设置读取超时
String validateUrl = "http://”服务器地址“/checkadmin.php"; //这里是你与服务器交互的地址
HttpPost httpRequst = new HttpPost(validateUrl);
List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>(); //准备传输的数据
params.add(new BasicNameValuePair("user", account));
params.add(new BasicNameValuePair("password", loginword));
try
{
httpRequst.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));//发送请求
HttpResponse response = httpClient.execute(httpRequst); //得到响应
if(response.getStatusLine().getStatusCode() == 200)//返回值如果为200的话则证明成功的得到了数据
{
StringBuilder builder = new StringBuilder();
//将得到的数据进行解析
BufferedReader buffer = new BufferedReader(
new InputStreamReader(response.getEntity().getContent()));
for(String s =buffer.readLine(); s!= null; s = buffer.readLine())
{
builder.append(s);
}
System.out.println(builder.toString());
//得到Json对象
JSONObject jsonObject = new JSONObject(builder.toString());
//通过得到键值对的方式得到值
isSuccess=jsonObject.getBoolean("isSuccess");
//在线程中判断是否得到成功从服务器得到数据
}
else
{
id=0;
}
} catch (Exception e)
{
e.printStackTrace();
}
}}
以下是服务器端checkadmin.php的代码:
<?php
//这里应该是是从Mysql数据库中得到相应的数据,
//这里仅仅是模拟过程,不再写相应的数据库交互代码
$username = str_replace(" ", "", $_POST['user']);
$password = str_replace(" ", "", $_POST['password']);
$id = 1;
$isSuccess=false;
//将数据存储到数据中
if($username=="admin")
{
if($password=="123456")
{$isSuccess=true;}
}
else {$isSuccess=false;}
$arr = array(
'isSuccess'=>$isSuccess
);
//将数组转成json格式进行传递
$strr = json_encode($arr);
echo($strr);
?>主线程中登录按钮的监听器如下:
new Thread(new RequestThread_admin()).start();
try {Thread.currentThread().sleep(100);//阻断0.1秒
//如果不阻断可能会出现在isSuccess返回前就做判断。当然可以通过设置Thread.Join方法来解决。
} catch (InterruptedException e) {
e.printStackTrace();
}
//show.setText("成功与否:"+isSuccess);
if(isSuccess)
{
Intent intent=new Intent(MainActivity.this,AdminActivity.class);
Bundle bundle=new Bundle();
bundle.putString("account",account);
intent.putExtras(bundle);
startActivity(intent);
}
if(!isSuccess)
{
Toast.makeText(MainActivity.this, "账号或密码错误,请重新输入" +".....", Toast.LENGTH_LONG).show();
} //弹出式的提示框
安卓与PHP服务器交互
最新推荐文章于 2024-09-17 10:25:13 发布