0

因此,我已将密码作为哈希存储在共享首选项中,当用户输入密码时,我需要对其进行哈希处理并与存储的密码进行比较。

是否应该在 AsyncTask 或 Thread 中完成,因为计算和比较可能会冻结 UI?然后你知道从异步任务或线程接收结果(真,假)的干净方法吗?

public void startGenerateCode(View view) {
    String pinCompare = pin; //pin is class variable obtained from editText
    pinCompare = tools.bin2hex(tools.getHash(pinCompare)); 

    if(pinCompare.compareTo(session.getDetails("Pin"))==0){
        generateCode();
    }
    else
        Toast.makeText(this, "Wrong PIN", Toast.LENGTH_SHORT).show();

}

public void generateCode(){
    Intent i = new Intent(this, GeneratedCode.class);
    startActivity(i);
    overridePendingTransition(R.anim.right_slide_in, R.anim.right_slide_out);
    finish();
}

这是在按下按钮后在活动中完成的。

4

1 回答 1

2

佐洛,

我猜这个过程是在有人按下 a 时触发的Button,比如登录。我认为你不需要任何额外的东西Thread来处理Hash微积分。

如果您必须连接到服务器并发送/接收数据,那么由于异步流程,您应该使用它。

对主帖评论的回复:是的,您可以在onPostExecute.

代码示例:

public void startGenerateCode(View view) {

    // Disable button         
    Button button = (Butto) view;
    button.setEnabled(false);

    String pinCompare = pin; //pin is class variable obtained from editText
    pinCompare = tools.bin2hex(tools.getHash(pinCompare)); 

    if(pinCompare.compareTo(session.getDetails("Pin"))==0){
        generateCode();
    } else {
        // If the login fails, re-enable the button to try again
        button.setEnabled(true);
        Toast.makeText(this, "Wrong PIN", Toast.LENGTH_SHORT).show();
    }
}

我是用心做的,所以可能会有错误。

于 2017-02-18T12:11:17.417 回答