JSON 响应不工作,不知道这个问题
JSON response Not Working, don't know the issue
在应用程序中,我需要通过输入用户名和密码来执行登录,这将在数据库中通过检查,我已经通过不使用 JSON 仅通过检查给定的响应成功完成了PHP,但我需要检索所有数据并认为使用 JSON 会很棒。
这是 android 工作室代码,然后是 php 代码。
public class MainActivity extends AppCompatActivity {
Button button_login;
EditText username,password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_screen);
button_login = findViewById(R.id.button_login);
username = findViewById(R.id.username);
password = findViewById(R.id.password);
button_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
login();
}
});
}
public void login() {
String json_url = "https://app.jetransporte.ma/android/loginjson.php";
Map<String, String> params = new HashMap();
params.put("username", username.getText().toString());
params.put("password", password.getText().toString());
JSONObject parameters = new JSONObject(params);
final JsonObjectRequest JsonObjectRequest = new JsonObjectRequest(Request.Method.POST, json_url, parameters,
new Response.Listener<JSONObject> () {
@Override
public void onResponse(JSONObject response) {
try {
JSONObject json = new JSONObject();
String usname = json.getString("username");
String usid = json.getString("user_id");
String correct = json.getString("correct");
if(usid.contains("1")){
Intent intent = new Intent(getApplicationContext(), SelectorActivity.class);
startActivity(intent);
}else{
Toast.makeText(getApplicationContext(),
"Login ou Mot de passe Incorrecte",Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}){
};
Volley.newRequestQueue(this).add(JsonObjectRequest);
}
}
我想要执行的是从 mysql 数据库中检索数据,当尝试使用 GET 方法直接在浏览器上访问它时,它会给出一个带有括号 {} 的 json 对象,
这是 PHP 代码
<?php
include "../db/db.php"; // $db->conn
$username = filter_input(INPUT_POST, "username");
$password = filter_input(INPUT_POST, "password");
$query= $db->query("SELECT * FROM tbl_user WHERE username = 'saad' ");
$countin = $query->rowCount();
if($countin>0){
$fetchin= $query->fetch();
$json = json_encode($fetchin);
echo $json;
}else{
$fetchin['correct']="0";
$json = json_encode(array("correct" => $fetchin["correct"]));
echo $json;
}
?>
任何帮助,我是 android studio 和 java 的新手,我真的很想让它工作
您已经在onResponse
方法中获得了JSONObject
。我不知道你为什么在那里创建空 JSONObject
。请删除它并尝试如下:
@Override
public void onResponse(JSONObject response) {
try {
String usname = response.optString("username");
String usid = response.optString("user_id");
String correct = response.optString("correct");
if(usid.contains("1")) {
Intent intent = new Intent(getApplicationContext(), SelectorActivity.class);
startActivity(intent);
} else {
Toast.makeText(getApplicationContext(),
"Login ou Mot de passe Incorrecte",Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
基本上,在使用了 Md. Asaduzzaman 提供的帮助之后。我能够在应用程序中执行该操作。但在那之后,发送到 php 脚本的参数中的 none 起作用了。所以解决方案是以这种方式获取参数:
$param = json_decode(file_get_contents("php://input"),true);
$用户名 = $参数["username"]; $密码 = $参数["password"];
而不是 $_POST["username"]
有关此的更多信息:
在应用程序中,我需要通过输入用户名和密码来执行登录,这将在数据库中通过检查,我已经通过不使用 JSON 仅通过检查给定的响应成功完成了PHP,但我需要检索所有数据并认为使用 JSON 会很棒。 这是 android 工作室代码,然后是 php 代码。
public class MainActivity extends AppCompatActivity {
Button button_login;
EditText username,password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_screen);
button_login = findViewById(R.id.button_login);
username = findViewById(R.id.username);
password = findViewById(R.id.password);
button_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
login();
}
});
}
public void login() {
String json_url = "https://app.jetransporte.ma/android/loginjson.php";
Map<String, String> params = new HashMap();
params.put("username", username.getText().toString());
params.put("password", password.getText().toString());
JSONObject parameters = new JSONObject(params);
final JsonObjectRequest JsonObjectRequest = new JsonObjectRequest(Request.Method.POST, json_url, parameters,
new Response.Listener<JSONObject> () {
@Override
public void onResponse(JSONObject response) {
try {
JSONObject json = new JSONObject();
String usname = json.getString("username");
String usid = json.getString("user_id");
String correct = json.getString("correct");
if(usid.contains("1")){
Intent intent = new Intent(getApplicationContext(), SelectorActivity.class);
startActivity(intent);
}else{
Toast.makeText(getApplicationContext(),
"Login ou Mot de passe Incorrecte",Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}){
};
Volley.newRequestQueue(this).add(JsonObjectRequest);
}
}
我想要执行的是从 mysql 数据库中检索数据,当尝试使用 GET 方法直接在浏览器上访问它时,它会给出一个带有括号 {} 的 json 对象,
这是 PHP 代码
<?php
include "../db/db.php"; // $db->conn
$username = filter_input(INPUT_POST, "username");
$password = filter_input(INPUT_POST, "password");
$query= $db->query("SELECT * FROM tbl_user WHERE username = 'saad' ");
$countin = $query->rowCount();
if($countin>0){
$fetchin= $query->fetch();
$json = json_encode($fetchin);
echo $json;
}else{
$fetchin['correct']="0";
$json = json_encode(array("correct" => $fetchin["correct"]));
echo $json;
}
?>
任何帮助,我是 android studio 和 java 的新手,我真的很想让它工作
您已经在onResponse
方法中获得了JSONObject
。我不知道你为什么在那里创建空 JSONObject
。请删除它并尝试如下:
@Override
public void onResponse(JSONObject response) {
try {
String usname = response.optString("username");
String usid = response.optString("user_id");
String correct = response.optString("correct");
if(usid.contains("1")) {
Intent intent = new Intent(getApplicationContext(), SelectorActivity.class);
startActivity(intent);
} else {
Toast.makeText(getApplicationContext(),
"Login ou Mot de passe Incorrecte",Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
基本上,在使用了 Md. Asaduzzaman 提供的帮助之后。我能够在应用程序中执行该操作。但在那之后,发送到 php 脚本的参数中的 none 起作用了。所以解决方案是以这种方式获取参数:
$param = json_decode(file_get_contents("php://input"),true); $用户名 = $参数["username"]; $密码 = $参数["password"];
而不是 $_POST["username"]
有关此的更多信息: