JSON ответ Не работает, не знаю проблему - PullRequest
0 голосов
/ 12 января 2020

В приложении мне нужно выполнить вход в систему, введя имя пользователя и пароль, которые будут проверены в базе данных, я уже преуспел в этом, не используя 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, которая дает объект json с этими скобками { } при попытке доступа к нему напрямую в браузере с помощью метода GET

Вот код 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 и действительно WI sh, чтобы заставить его работать

Ответы [ 2 ]

0 голосов
/ 12 января 2020

В основном, после использования помощи, предоставленной Md. Asaduzzaman. Я смог заставить действие работать в приложении. но после этого ни один из параметров, отправленных в сценарий php, не работал. поэтому решение было получить параметры следующим образом:

$ param = json_decode (file_get_contents ("php: // input"), true); $ username = $ param ["username"]; $ password = $ param ["password"];

Вместо $ _POST ["username"]

Подробнее об этом: Передать jsonobject в качестве параметра запроса, используя метод post volley

0 голосов
/ 12 января 2020

У вас уже есть метод JSONObject in onResponse. Я не знаю, почему вы создаете пустой 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();
    }

}
...