#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, с которой вы работаете). ИЛИ сделайте что-нибудь вроде aDebug.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();
Попробуйте .. может это сработает для вас.