Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 虽然满足条件,但布尔值不计算为true_Android_Android Asynctask - Fatal编程技术网

Android 虽然满足条件,但布尔值不计算为true

Android 虽然满足条件,但布尔值不计算为true,android,android-asynctask,Android,Android Asynctask,所以我有一个静态变量isSuccessful,这个变量应该做的就是,如果有人能够成功登录,则为true;如果没有,则为false。默认情况下,我将其设置为false。我编写的php脚本发送消息“LoginsAccess”,并将其存储在onProgressUpdate参数中。我调试了一下,看看参数中是否存储了这样的内容,编译器说是这样的。那么,我不明白为什么isSuccessful没有被转换为true。我让它这么做。一旦发生这种情况,我将登录活动称为主屏幕活动。 登录任务: public clas

所以我有一个静态变量isSuccessful,这个变量应该做的就是,如果有人能够成功登录,则为true;如果没有,则为false。默认情况下,我将其设置为false。我编写的php脚本发送消息“LoginsAccess”,并将其存储在onProgressUpdate参数中。我调试了一下,看看参数中是否存储了这样的内容,编译器说是这样的。那么,我不明白为什么isSuccessful没有被转换为true。我让它这么做。一旦发生这种情况,我将登录活动称为主屏幕活动。 登录任务:

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"))