虽然满足条件,但布尔值不会评估为true

时间:2017-03-05 21:16:00

标签: android android-asynctask

所以我有一个名为isSuccessful的静态变量,所有变量应该这样做,如果某人能够成功登录则为true,如果他们不能,则为false。我默认将它设置为false。我写的php脚本发送消息" loginsuccess"并将其存储在onProgressUpdate参数中。我进行了调试,看看是否存储了参数中的内容,编译说它是。那么我无法弄清楚为什么成功并没有被切换为真。我设定它来做那件事。一旦发生这种情况,我就有登录活动调用homeScreen活动。 LoginTask:

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);
    }
}

LogInActivity:

public class LogInActivity extends Activity {
    private Typeface fontRobo;
    private TextView logoText;
    private EditText userName;
    private EditText passWord;

    private TextView dontHave;
    private TextView signUp;

    private Button logIn;
    Intent i;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_log_in);
        i = new Intent(this, HomeActivity.class);

        //Logo
        logoText = (TextView)findViewById(R.id.Logo);
        fontRobo = Typeface.createFromAsset(this.getAssets(),"fonts/ROBO.ttf");
        logoText.setText("ArtSpace");
        logoText.setTypeface(fontRobo);

        //Don't have an account?
        dontHave = (TextView) findViewById(R.id.Donthave);
        dontHave.setTypeface(fontRobo);

        //Sign Up
        signUp = (TextView) findViewById(R.id.signUP);
        signUp.setTypeface(fontRobo);

        userName = (EditText) findViewById(R.id.userName);
        passWord = (EditText) findViewById(R.id.passWord);

        logIn = (Button) findViewById(R.id.LogIn);

    }
    //Log in button event
    public void logInClick(View view)
    {
        final LogInTask task = new LogInTask(LogInActivity.this);
        task.execute(userName.getText().toString(), passWord.getText().toString());
        if(LogInTask.isSuccessful)
            startActivity(i);

    }

PHP:

<?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";

    }
?>

1 个答案:

答案 0 :(得分:1)

task.execute()是AsyncTask又称需要时间才能执行。但是你打电话后正在检查。您需要在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());

PS:还有别的,不要将字符串与==使用.equals()进行比较

if(values[0].equals("loginsuccess"))