Ошибка регистрации: org.json.JSONException: значение <br типа java.lang.Строка не может быть преобразована в JSONObject

#php #android #json

#php #Android #json

Вопрос:

Я начинаю Android-проект входа в систему и регистрации пользователя. При компиляции я получаю эту ошибку. Кто-нибудь может мне помочь?

Ошибка: org.json.JSONException Значение <br типа java.lang.Строка не может быть преобразована в JSONObject .

Значения успешно загружаются на локальный хост, но ошибка продолжается. Я думаю, что в функции Cadastro() в коде класса должна быть какая-то ошибка.

КЛАСС:

 public class CadastroActivity extends AppCompatActivity {
private EditText nome, email, senha, c_senha;
private Button btn_cadastrar;
private ProgressBar loading;
private static String URL_REGISTRO = 
"http://192.168.0.17/gbprata/registro.php";

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

    loading = findViewById(R.id.loading);
    nome = findViewById(R.id.edit_Nome);
    email = findViewById(R.id.edit_EmailCadastro);
    senha = findViewById(R.id.edit_SenhaCadastro);
    c_senha = findViewById(R.id.edit_RepeteSenha);
    btn_cadastrar = findViewById(R.id.button_cadastrarse);


    btn_cadastrar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Cadastro();
        }
    });
}
private void Cadastro(){
    loading.setVisibility(View.VISIBLE);
        btn_cadastrar.setVisibility(View.GONE);

        final String nome = this.nome.getText().toString().trim();
        final String email = this.email.getText().toString().trim();
        final String senha = this.senha.getText().toString().trim();
        final String c_senha = this.c_senha.getText().toString().trim();

    StringRequest StringRequest = new StringRequest(Request.Method.POST, URL_REGISTRO,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                try {
                    JSONObject jsonObject = new JSONObject(response);
                    String success = jsonObject.getString("success");

                    if (success.equals("1")){
                        Toast.makeText(CadastroActivity.this, "Registrado com sucesso!", Toast.LENGTH_SHORT).show();
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                    Toast.makeText(CadastroActivity.this, "Erro ao registrar! " e.toString(), Toast.LENGTH_SHORT).show();
                    loading.setVisibility(View.GONE);
                    btn_cadastrar.setVisibility(View.VISIBLE);
                }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(CadastroActivity.this, "Erro ao registrar! " error.toString(), Toast.LENGTH_SHORT).show();
                    loading.setVisibility(View.GONE);
                    btn_cadastrar.setVisibility(View.VISIBLE);
                }
            })
    {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String,String> params = new HashMap<>();
            params.put("nome", nome);
            params.put("email", email);
            params.put("senha", senha);
            return params;
        }
    };

    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(StringRequest);

}
 

}

PHP-файл

 <?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {

    $nome = $_POST['nome'];
    $email = $_POST['email'];
    $senha = $_POST['senha'];

    $senha = password_hash($senha, PASSWORD_DEFAULT);

    require_once 'conexao.php';

    $sql = "
        INSERT INTO tb_alunos (nome, email, senha) VALUES ('$nome', '$email', '$senha');
    ";
    if (mysqli_query($conn, $sql)) {
        $result["success"] = "1";
        $result["menssage"] = "success";

        echo_json_encode($result);
        mysqli_close($conn);
    } else {
        $result["success"] = "0";
        $result["menssage"] = "error";

        echo_json_encode($result);
        mysqli_close($conn);
    }
}



?>
 

Комментарии:

1. похоже, ваш php-скрипт выдает какую-то ошибку. Проверьте, что на самом деле возвращает php (прежде чем пытаться анализировать json), чтобы увидеть, в чем проблема.

2. ** Ошибка: org.json.JSONException значение br типа java.lang.string не может быть преобразовано в JSONObject

3. Интересная вещь — не ошибка Android, ошибка php! Проверьте response в Android перед этой строкой JSONObject jsonObject = new JSONObject(response);

4. кстати, ваш php sql широко открыт для атак sql-инъекций. используйте подготовленные элементы!

5. установите точку останова в этой строке — при ее разрыве наведите курсор response мыши (зависит от IDE, с которой вы работаете). ИЛИ сделайте что-нибудь вроде a Debug.Write(response); (прошло некоторое время с тех пор, как я в последний раз кодировал Java для Android в Eclipse, поэтому его можно назвать по-другому)

Ответ №1:

Скорее всего, вы получили неработающий PHP-код, строку

 echo_json_encode($result);
 

скорее должно выглядеть так:

 echo json_encode($result);
 

Ответ №2:

Здесь в вашем случае вы напрямую присваиваете значение json string «успех».

 String success = jsonObject.getString("success");
 

Замените его приведенным ниже кодом

 String success = jsonObject.getString("success").toString();
 

Попробуйте .. может это сработает для вас.