Как получить значение внутри JsonObject

Я пробую этот новый метод, Ион. с PDO, и я застрял там, где хочу получить значение внутри JsonObject. Раньше я использовал Volly с msqli, но нашел Ion. более организованным и более безопасным PDO.

всякий раз, когда я пытаюсь добавить какой-либо код в java, он просто ломается и не работает, как будто нет связи с PHP, поэтому я застрял

часть, в которой я застрял, это LOG_IN_SUCCESS, так как мне нужно получить идентификатор пользователя для диспетчера сеансов, поскольку $row не отображается в java только в случае "LOG_IN_SUCCESS" я также добавил случай "LOG_IN_SUCCESS": случай "0": {разрыв кода;}, но я не работал

Я попытался добавить новую строку для случая "0", которая содержит идентификатор пользователя, но код просто сломался

Джава

      private void loginbtn(final String email, final String password) {


    Ion.with(getApplicationContext())
            .load(HOST)
            .setBodyParameter("susers_semails", email)
            .setBodyParameter("susers_spasswords", password)
            .asJsonObject()
            .setCallback(new FutureCallback<JsonObject>() {
                @Override
                public void onCompleted(Exception e, JsonObject result) {

                    try {

                        String completed = result.get("LOGIN").getAsString();

                        switch (completed){

                            case "Email_Doesnt_Exist":
                                edtemail.setError("Email Doesnt Exist");
                                loginbtn.setVisibility(View.VISIBLE);
                                progressBar.setVisibility(View.GONE);
                                break;

                            case "Log_In_Success":


                                    Intent intent = new Intent(LoginActivity.this, HomeSearchActivity.class);
                                    startActivity(intent);
                                    finish();
                                    loginbtn.setVisibility(View.VISIBLE);
                                    progressBar.setVisibility(View.GONE);
                                    Toast.makeText(LoginActivity.this, completed, Toast.LENGTH_LONG);
                                    Log.d(TAG, "onCompleted: " + completed);
                                break;





                            case "Log_In_Failed":
                                edtpassword.setError("Incorrect Password");
                                loginbtn.setVisibility(View.VISIBLE);
                                progressBar.setVisibility(View.GONE);

                                break;

                            default:
                                Toast.makeText(getApplicationContext(), "Ops! Error Occurred m", Toast.LENGTH_LONG).show();
                                loginbtn.setVisibility(View.VISIBLE);
                                progressBar.setVisibility(View.GONE);

                                break;

                        }
                    }catch (Exception error){
                        Toast.makeText(getApplicationContext(), "Please Check Connection And Try Again", Toast.LENGTH_LONG).show();
                        loginbtn.setVisibility(View.VISIBLE);
                        progressBar.setVisibility(View.GONE);


                    }

                }
            });


}

php

   $susers_semails = $_POST['susers_semails'];
   $susers_spasswords = $_POST['susers_spasswords'];

   

   $stmt = $PDO->prepare("SELECT susers_sids,susers_semails,susers_spasswords FROM userstbl WHERE 
   susers_semails = :USER_EMAIL" );

   $stmt->bindParam(':USER_EMAIL',$susers_semails);
   $stmt->execute();
   $row = $stmt->fetch(PDO::FETCH_ASSOC); 
   

   if (!empty($row)) {

   if (password_verify($susers_spasswords, $row['susers_spasswords'])) {

     $returnApp = array( 'LOGIN' => 'Log_In_Success',$row);
     echo json_encode($returnApp);

    } 
    else {
    
     $returnApp = array( 'LOGIN' => 'Log_In_Failed');
     echo json_encode($returnApp);
    }

   } else {

     $returnApp = array( 'LOGIN' => 'Email_Doesnt_Exist');
     echo json_encode($returnApp);

  }

JSON

  {
  0: {
  susers_sids: "3"
  },
  LOGIN: "Log_In_Success" 
  }
String completed = result[0].LOGIN; ?
Louys Patrice Bessette 21.12.2020 01:09

@LouysPatriceBessette, но результат не является массивом ???

michelle naaom 21.12.2020 01:15

Вы можете получить доступ к свойству объекта с помощью квадратных скобок. Это не значит, что это массив.

Louys Patrice Bessette 21.12.2020 01:18

@LouysPatriceBessette, ну, это просто выдает мне ошибку, так как он ожидает объект, а не массив, поскольку результат определяется как объект «результат JsonObject» в завершенном

michelle naaom 21.12.2020 01:21

$row становится атрибутом объекта $returnApp в виде массива. Я думаю, вы пытаетесь передать только suser_sids, поэтому должно быть что-то вроде array( 'LOGIN' => 'Log_In_Success', 'susers_sids' => $row['susers_sids']); для возврата { LOGIN: "Log_In_Success" , susers_sids: "3",}, в качестве альтернативы вы можете использовать array_merge_recursive.

Louis Loudog Trottier 21.12.2020 01:36

@LouisLoudogTrottier, да, это идеально, большое спасибо, теперь я понимаю, если вы хотите ответить, поэтому я даю правильный ответ, все в порядке.

michelle naaom 21.12.2020 01:43

@michellenaaom рада, что это сработало. Смотрите мой ответ ниже и добро пожаловать на борт.

Louis Loudog Trottier 21.12.2020 03:11
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
7
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

$row стать атрибутом объекта $returnApp в виде ассоциативного массива. Я думаю, вы пытаетесь передать только suser_sids, поэтому должно быть что-то вроде

$returnApp=array( 
    'LOGIN' => 'Log_In_Success', 
    'susers_sids' => $row['susers_sids']
); 

поэтому он вернется как:

{ 
    LOGIN: "Log_In_Success" , 
    susers_sids: "3"
}

В качестве альтернативы вы можете использовать array_merge_recursive, чтобы включить строку в наш объект (как один ассоциативный массив), но я не буду хранить/передавать пароль пользователя, если это действительно необходимо.

Обновлено: Другой способ, которым вы можете/должны это сделать, - создать фактический объект вместо использования ассоциативного массива. Что-то вроде этого создаст анонимный объект, который вы можете передать json_encode точно так же, как вы делаете это сейчас (добро пожаловать в ООП):

$returnAPP->LOGIN = "Log_In_Success";
$returnAPP->susers_sids=$row['susers_sids'];
echo json_encode($returnApp);

Вы даже можете определить такой класс, но PHP такой, какой он есть, он создаст для вас stdObject;)

Другие вопросы по теме