java - 比较 textview 和 JSONArray 中的值

标签 java android json getjson arrays

很抱歉这个(看似)懒惰的问题,但我一直在寻找一个没有运气的解决方案(换句话说,我还没有找到我理解的解决方案)。

我想让用户通过输入用户名和密码来登录应用程序,该用户名和密码必须与我从 phpmyadmin 数据库检索到的 jsonarray 中的用户名和密码匹配。用户名和密码必须位于同一行。

这是我用来检索 jsonarray 的函数:

private void getData(){

JSONArray json;
try{
    user = editText1.getText().toString();
    password = editText2.getText().toString();

    json = readJsonFromUrl("http://localhost/indextest.php?function=getdata");

       Thread.sleep(1000);
  } catch (Exception e) {
    Log.e("BACKGROUND_PROC", e.getMessage());
  }

}

我只需要知道如何在 jsonarray 中搜索从 TextView 中检索到的值。

如果可能的话,我想检索一个可以轻松分配给 if 语句的值,如下所示:

public void onClick(View v) {

        switch (v.getId()) {
            case R.id.button1:

                if  ( editText1 != null && editText1.length() != 0 && editText2 != null && editText2.length() != 0){    
                    getData();
                    m_ProgressDialog = ProgressDialog.show(HomeScreen.this,    
                              "Please wait...", "Checking Details...", true);
                        m_ProgressDialog.setCancelable(true);

                      if ( /*username and password match*/){
                      Intent i = new Intent(this, Afterlog.class);
                      startActivity(i);     
                      }

                    else{
                        Toast.makeText(HomeScreen.this, "The username and password did not match any in our database...", Toast.LENGTH_SHORT).show();   
                    }
                }
                else {
                    Toast.makeText(HomeScreen.this, "Please enter a user name AND a password...", Toast.LENGTH_SHORT).show();
                }
                break;

}
}

最佳答案

有两件事:

  • 看看GSON 。它是一个Google Library,用于将对象编码为json,然后将json解码为对象。本质上,您可以定义一个与您在 JSON 中接收的数据具有相同结构的类,然后使用 GSON 读取 JSON 并创建一个填充了适当字段的类的对象。您的代码将如下所示:

首先,为要以 JSON 形式发送的数据定义类结构:

public class LoginData {
    public String Username; //These identifiers must match the JSON structure
    public String HashedPassword;

    public LoginData(String username, String hashedPass) {
        Username = username;
        HashedPassword = hashedPass;
    }
}

然后,一旦收到 JSON,您就可以像这样解析信息:

LoginData login = mGson.fromJson(json, LoginData.class);
  • 听起来您正在以原始文本形式存储用户名和密码,并以原始文本形式从数据库中检索它们。这是一个非常糟糕的主意!密码应始终以加密形式存储(即散列)。当用户提供密码登录时,您对提供的密码进行加密并比较加密版本(即将提供的密码的哈希值与数据库中存储的哈希值进行比较)。这可以防止可能监听您网络流量的人捕获您的密码。相反,如果他们监视您的网络流量,他们会看到哈希密码,并且在不确切知道用​​于哈希密码的算法的情况下,他们将无法计算原始密码。

关于java - 比较 textview 和 JSONArray 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25066237/

相关文章:

java - int[]数组和BitSet的交集可以更快吗?

android - Firebase ML Kit 人脸检测不准确

Java POJO 建模

java - 如何避免 Eclipse 包装参数?

json - HIVE - 加载推特 JSON 数据时出错

javascript - 在 JSobject 中追加元素

Java 框然后在 == 运算符上加宽

java - Java中泛型类型的实际返回类型是什么?

java - HTTP CONNECT 隧道回复 BAD 请求 (400)

android - 查找 git commit 产生的一些代码