我创建了一个使用服务器上的 PHP 文件与 MySQL 数据库交互的 Android 应用程序。我创建了一个final string EXTRA_SOLDE
意图发送到其他活动以显示结果。
一切都很好,但在另一个活动中,它TextView
是空白的,好像什么都没发送一样。请帮忙。
这是我的 PHP 文件:
<?php
unset($_GET);
if( isset($_POST['username'])) {
echo '<?xml version="1.0"?>'."\n";
echo "<login>\n";
// host doit être remplacé par le serveur de la base de données.
// user représente le nom d'utilisateur de la base de données.
// pass est le mot de passe pour accéder à cette base de données avec cette
// utilisateur.
$con = mysql_connect("mysql6.000webhost.com","","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("a1287023_auth",$con);
if(get_magic_quotes_gpc()) {
$login = stripslashes($_POST['username']);
} else {
$login = $_POST['username'];
}
unset($_POST);
$kid = login($login);
if($kid == -1) {
error(3);
} else {
printf(' <user id="%d"/>'."\n",$kid);
}
echo "</login>";
}
function error($ec) {
printf(' <error value="%d"/>'."\n".'</login>',$ec);
die();
}
function login($login) {
$select = "
SELECT epargne
FROM auth_table
WHERE user_id = '$login'
";
$fixedlogin = mysql_real_escape_string($login);
$query = sprintf($select, $fixedlogin);
$result = mysql_query($query);
if(mysql_num_rows($result) != 1) { return -1; }
$row = mysql_fetch_row($result);
return $row[0];
return $row[1];
}
?>
这是我调用服务器上设置的 PHP 文件的活动。
public void onClick(View v){
Intent intent = getIntent();
if (intent != null) {
String valeur=intent.getStringExtra(EXTRA_USER);
doLogin(valeur);
}
}
});}
private void doLogin(final String login) {
// Création d'un thread
Thread t = new Thread()
{
public void run()
{
Looper.prepare();
// On se connecte au serveur afin de communiquer avec le PHP
DefaultHttpClient client = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(client.getParams(), 15000);
HttpResponse response;
HttpEntity entity;
try
{
// On établit un lien avec le script PHP
HttpPost post = new HttpPost(UPDATE_URL);
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("username", login));
post.setHeader("Content-Type", "application/x-www-form-urlencoded");
// On passe les paramètres login et password qui vont être récupérés
// par le script PHP en post
post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
// On récupère le résultat du script
response = client.execute(post);
entity = response.getEntity();
InputStream is = entity.getContent();
// On appelle une fonction définie plus bas pour traduire la réponse
read(is);
is.close();
if (entity != null)
entity.consumeContent();
}
catch (Exception e)
{
progressDialog.dismiss();
createDialog("Error", "Connexion Impossible");
}
Looper.loop();
}
};
t.start();
}
private void read(InputStream in)
{
// On traduit le résultat d'un flux
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp;
try
{
sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
// Cette classe est définie plus bas
LoginContentHandler uch = new LoginContentHandler();
xr.setContentHandler(uch);
xr.parse(new InputSource(in));
}
catch (ParserConfigurationException e)
{
}
catch (SAXException e)
{
}
catch (IOException e)
{
}
}
class LoginContentHandler extends DefaultHandler
{
// Classe traitant le message de retour du script PHP
private boolean in_loginTag = false;
private int userID;
private String money ;
private boolean error_occured = false;
public void startElement(String n, String l, String q, Attributes a)
throws SAXException
{
if (l == "login")
in_loginTag = true;
if (l == "error")
{
progressDialog.dismiss();
switch (Integer.parseInt(a.getValue("value")))
{
case 1:
createDialog("Error", "Couldn't connect to Database");
break;
case 2:
createDialog("Error", "Error in Database: Table missing");
break;
case 3:
createDialog("Error", "Invalid username and/or password");
break;
}
error_occured = true;
}
if (l == "user" && in_loginTag && a.getValue("id") != "")
// Dans le cas où tout se passe bien on récupère l'ID de l'utilisateur
userID = Integer.parseInt(a.getValue("id"));
money = String.valueOf(userID) ;
}
public void endElement(String n, String l, String q) throws SAXException
{
// on renvoie l'id si tout est ok
if (l == "login")
{
in_loginTag = false;
if (!error_occured)
{
progressDialog.dismiss();
Intent i = new Intent(Budget.this,Epargne.class);
i.putExtra(EXTRA_SOLDE,money);
startActivity(i);
}
}
}
public void characters(char ch[], int start, int length)
{
}
public void startDocument() throws SAXException
{
}
public void endDocument() throws SAXException
{
}
}
}