gpt4 book ai didi

java - 尝试在 android 中通过 JSONarray 验证密码

转载 作者:行者123 更新时间:2023-11-30 02:45:49 27 4
gpt4 key购买 nike

自从我上次尝试申请以来已经太久了,我自己似乎无法得到答案。我需要让用户在登录时在我的应用程序中输入密码和用户名,我想通过在 PHP Myadmin 中搜索数据库来做到这一点。

我已经将代码提升到(我认为)它应该接近完成的水平,但我不明白其中的逻辑。

我需要计算 if 语句来比较用户通过 JSONArray 输入到数据库中的用户名和密码,此外,如果代码仍然无法正常工作,我们将不胜感激 :)

if 语句标有 ----> 我知道我需要某种形式的 for 循环来遍历和比较值,但这是我从未处理过的事情。

这是我的登录屏幕的代码:

    public class HomeScreen extends Activity implements OnClickListener {

private ProgressDialog m_ProgressDialog = null;


EditText editText1;
EditText editText2;
String clear1;
String user;
String password;
URL url;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_screen);

View loginBTN = findViewById(R.id.button1);
loginBTN.setOnClickListener(this);

editText1=(EditText)findViewById(R.id.editText1);
editText2=(EditText)findViewById(R.id.editText2);
clear1 ="";
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.home_screen, menu);
return true;
}

public void onClick(View v) {

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

user = editText1.getText().toString();
password = editText2.getText().toString();

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(testData()) {
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;

}
}


private static String readAll(Reader rd) throws IOException {
StringBuilder sb = new StringBuilder();
int cp;
while ((cp = rd.read()) != -1) {
sb.append((char) cp);
}
return sb.toString();
}

public static JSONArray readJsonFromUrl(String url) throws IOException, JSONException {
InputStream is = new URL(url).openStream();
try {
BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
String jsonText = readAll(rd);
JSONArray json = new JSONArray(jsonText);
return json;
} finally {
is.close();
}
}

public void getData() {

try{

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

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


}

public boolean testData() {
getData();
user = editText1.getText().toString();
password = editText2.getText().toString();

for (int i = 0; i < json.length(); i++) {
JSONObject currentObject = json.getJSONObject(i);
if (currentObject.getString("username", "").equals(user) && currentObject.getString("password", "").equals(password))
return true;
}
return false;
}

最佳答案

您想对用户进行身份验证吗?如果是这样,那么我认为这不是正确的方法。您应该将用户名和密码发送到服务器(可能是加密的),然后服务器将检查用户名和密码是否匹配并回复您一个简单的 JSON,例如:

{
response: 1
}

表示认证成功(否则为0,例如)。

如果您只想从 JSON 对象获取数据,我建议您将 JSONArrayObject 更改为 JSONObject 并从中检索数据,您可以这样做:

JSONObject json = getData(); // getData now returns a JSONObject
String username = json.getString ("username");

我假设一个像这样的 JSON:

{
username: "Foo",
password: "123"
}

////编辑--------------------------------

您可以让 getDate 函数检查它是否已经匹配,如果匹配则返回 true 或 false。像这样:

public boolean getDate() {
// Get your data and put it into a JSONArray

for (int i = 0; i < json.length(); i++) {
JSONObject currentObject = json.getJSONObject(i);
if (currentObject.getString("username").equals(user) && currentObject.getString("password").equals(password))
return true;
}
return false;
}

您的 JSON 必须类似于:

 [
{
username: "Foo1",
password: "123"
},
{
usernmae: "Foo2",
password: "123"
}, ...
]

那么你的 if 就是:

if(getData()) {
Intent i = new Intent(this, Afterlog.class);
startActivity(i);
}

关于java - 尝试在 android 中通过 JSONarray 验证密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25062898/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com