Android 虽然满足条件,但布尔值不计算为true
所以我有一个静态变量isSuccessful,这个变量应该做的就是,如果有人能够成功登录,则为true;如果没有,则为false。默认情况下,我将其设置为false。我编写的php脚本发送消息“LoginsAccess”,并将其存储在onProgressUpdate参数中。我调试了一下,看看参数中是否存储了这样的内容,编译器说是这样的。那么,我不明白为什么isSuccessful没有被转换为true。我让它这么做。一旦发生这种情况,我将登录活动称为主屏幕活动。 登录任务:Android 虽然满足条件,但布尔值不计算为true,android,android-asynctask,Android,Android Asynctask,所以我有一个静态变量isSuccessful,这个变量应该做的就是,如果有人能够成功登录,则为true;如果没有,则为false。默认情况下,我将其设置为false。我编写的php脚本发送消息“LoginsAccess”,并将其存储在onProgressUpdate参数中。我调试了一下,看看参数中是否存储了这样的内容,编译器说是这样的。那么,我不明白为什么isSuccessful没有被转换为true。我让它这么做。一旦发生这种情况,我将登录活动称为主屏幕活动。 登录任务: public clas
public class LogInTask extends AsyncTask<String, String,String> {
public Scanner reader;
Formatter writer;
Context mcontext;
//if Login was successful
public static boolean isSuccessful;
LogInTask(Context context)
{
mcontext = context;
}
URL url;
URLConnection con;
String output = "";
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
isSuccessful=false;
try {
url = new URL("http://192.168.1.75:1234/login.php");
con = url.openConnection();
//allows to send information
con.setDoOutput(true);
//allows to receive information
con.setDoInput(true);
writer = new Formatter(con.getOutputStream());
//Sends login information to SQL table
writer.format("user_name="+params[0]+"&password="+params[1]);
writer.close();
//Reads input
reader = new Scanner(con.getInputStream());
while(reader.hasNext())
{
output+= reader.next();
}
reader.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
publishProgress(output);
return output;
}
@Override
protected void onProgressUpdate(String... values) {
Toast.makeText(mcontext, values[0],Toast.LENGTH_LONG).show();
if(values[0]=="loginsuccess")
isSuccessful = true;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
}
}
php:
task.execute()
是一项需要时间才能执行的异步任务。但你一打电话就查。您需要在onPostExecute()
块中检查isSuccessful。
大概是这样的:
final LogInTask task = new LogInTask(LogInActivity.this){
@Override
protected void onPostExecute(String s) {
if(LogInTask.isSuccessful)
startActivity(i);
}};
task.execute(userName.getText().toString(), passWord.getText().toString());
另外,不要将字符串与==
进行比较,请使用.equals()
没有phphere@nogad添加了phpy您的sql查询1)对sql注入开放,2)使用LIKE而不是精确比较,3)让数据库进行字符串比较,可能不区分大小写,4)使用明文存储的密码。@simon Svensson是的,我需要修复所有这些。这是我第一次这么做,所以我还在学习尝试,还是没有运气。再次调试,s等于“LoginSucess”,但出于某种原因,Issuccess仍然是假的。是的,我犯了一个愚蠢的错误。你的解决方案奏效了。谢谢。顺便问一下,当你输入一个像tgat这样的方法时,它叫什么?您将方法放入变量中。那叫什么?它是匿名类-
<?php
require "conn.php";
$user_name = $_POST['user_name'];
$user_pass = $_POST['password'];
$mysql_qry = "SELECT * FROM login WHERE UserName LIKE '$user_name' AND Password LIKE '$user_pass';";
$result = mysqli_query($conn,$mysql_qry);
if(mysqli_num_rows($result) == true)
{
echo "login success";
}
else
{
echo "login not success";
}
?>
final LogInTask task = new LogInTask(LogInActivity.this){
@Override
protected void onPostExecute(String s) {
if(LogInTask.isSuccessful)
startActivity(i);
}};
task.execute(userName.getText().toString(), passWord.getText().toString());
if(values[0].equals("loginsuccess"))