java - AsyncTask 未按预期完成

标签 java android android-asynctask

我有一个创建用户的 CreateUser 类。在我尝试添加新字段进行密码检查之前,此方法一直正常工作。

在任务中,我检查密码字段是否匹配,如果不匹配,我会取消执行并转到 toast 。

它会正确检查密码并在不正确时进行提示,但如果它们匹配,它仍然会取消执行并且永远不会完成创建新用户。

代码:

public class Register extends Activity implements OnClickListener{

private EditText user, pass, confirmPass;
private Button  mRegister;

// Progress Dialog
private ProgressDialog pDialog;

// JSON parser class
JSONParser jsonParser = new JSONParser();

private static final String LOGIN_URL = "https://xxx.xxx.xxx.xxx/xxx.php";

//ids
private static final String TAG_SUCCESS = "success";
private static final String TAG_MESSAGE = "message";

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.register);

    user = (EditText)findViewById(R.id.username);
    pass = (EditText)findViewById(R.id.password);
    confirmPass = (EditText)findViewById(R.id.passwordConfirm);

    mRegister = (Button)findViewById(R.id.register);
    mRegister.setOnClickListener(this);

}

@Override
public void onClick(View v) {
    new CreateUser().execute();
}

 class CreateUser extends AsyncTask<String, String, String> {
    /**
     * Before starting background thread Show Progress Dialog
     * */
    boolean failure = false;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(Register.this);
        pDialog.setMessage("Creating User...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    @Override
    protected String doInBackground(String... args) {
        // TODO Auto-generated method stub
        // Check for success tag
        int success;
        String username = user.getText().toString();
        String password = pass.getText().toString();
        String passwordCheck = confirmPass.getText().toString();

            try {
//-----------------------------------------------------------------------------Password Check
                if (password != passwordCheck) {
                    cancel(true);
                }

                if (!this.isCancelled()) {
                    // Building Parameters
                    List<NameValuePair> params = new ArrayList<NameValuePair>();
                    params.add(new BasicNameValuePair("username", username));
                    params.add(new BasicNameValuePair("password", password));

                    Log.d("request!", "starting");

                    //Posting user data to script
                    JSONObject json = jsonParser.makeHttpRequest(
                            LOGIN_URL, "POST", params);

                    // full json response
                    Log.d("Login attempt", json.toString());

                    // json success element
                    success = json.getInt(TAG_SUCCESS);
                    if (success == 1) {
                        Log.d("User Created!", json.toString());
                        finish();
                        return json.getString(TAG_MESSAGE);
                    } else {
                        Log.d("Login Failure!", json.getString(TAG_MESSAGE));
                        return json.getString(TAG_MESSAGE);

                    }
                }
                }catch(JSONException e){
                    e.printStackTrace();
                }

                return null;
    }
    /**
     * After completing background task Dismiss the progress dialog
     * **/
    protected void onPostExecute(String file_url) {
        // dismiss the dialog once product deleted
        pDialog.dismiss();
        if (file_url != null){
            Toast.makeText(Register.this, file_url, Toast.LENGTH_LONG).show();
        }
}
    @Override
    protected void onCancelled() {
        pDialog.dismiss();
        Toast.makeText(Register.this, "Passwords do not match", Toast.LENGTH_SHORT).show();

    }
}}

最佳答案

在您的 doInBackground 中,您正在使用 != 比较 2 个字符串这只会比较字符串的内存地址,因此即使 value 也会评估为 false两个字符串的值相同。将其更改为 equals()

关于java - AsyncTask 未按预期完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25921353/

相关文章:

java - 如何在android中从JSON获取百分比?

java - 如何检查列表中是否存在包含部分字符的元素

android - 注入(inject)到 Hilt 未实例化的任意 Logic 类中

android - 尝试在 Asynctask 中设置水平进度条会抛出 NullPointerException

java - 从 jar 文件启动时 Selenium 服务器没有响应

java - 有没有一种方法可以从 SQL 数据库中提取表数据,而无需使用 Java 中的 ResultSet 类?

android - 集成 Spotify Android 库

java - 无法让 VideoView 定位到某个位置 - Android

android - AsyncTask Android ProgressBar 不显示 [可能重复]

java - ProgressDialog 新 Activity Asynctask 未显示,为什么?