获得;无法将java.lang.String转换为JSONObject“;如何纠正错误
在我的应用程序中获取此错误 W/System.err:org.json.JSONException:java.lang.String类型的值br无法转换为JSONObject 这是我的RegisterActivity.java获得;无法将java.lang.String转换为JSONObject“;如何纠正错误,java,php,android,sql,json,Java,Php,Android,Sql,Json,在我的应用程序中获取此错误 W/System.err:org.json.JSONException:java.lang.String类型的值br无法转换为JSONObject 这是我的RegisterActivity.java public class RegisterActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCr
public class RegisterActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
final EditText etName=(EditText) findViewById(R.id.etname);
final EditText etUsername=(EditText) findViewById(R.id.etusername);
final EditText etPassword=(EditText) findViewById(R.id.etpassword);
final EditText etCPassword=(EditText) findViewById(R.id.etcpassword);
final EditText etEmail=(EditText) findViewById(R.id.etemail);
final EditText etContact=(EditText) findViewById(R.id.etcontact);
final EditText etAge=(EditText) findViewById(R.id.etage);
final Button btnRegister=(Button) findViewById(R.id.btnregister);
btnRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String name=etName.getText().toString();
final String username=etUsername.getText().toString();
final String password=etPassword.getText().toString();
final String email=etEmail.getText().toString();
final int age=Integer.parseInt(etAge.getText().toString());
final int contact=Integer.parseInt(etContact.getText().toString());
Response.Listener<String> responseListener = new Response.Listener<String>(){
@Override
public void onResponse(String response) {
try {
JSONObject jsonResponse= new JSONObject(response);
boolean success = jsonResponse.getBoolean("success");
if(success){
Intent intent = new Intent(RegisterActivity.this,LoginActivity.class);
RegisterActivity.this.startActivity(intent);
}else{
AlertDialog.Builder builder= new AlertDialog.Builder(RegisterActivity.this);
builder.setMessage("Register Failed")
.setNegativeButton("Retry",null)
.create()
.show();
}
} catch (JSONException e) {
e.printStackTrace();
AlertDialog.Builder build= new AlertDialog.Builder(RegisterActivity.this);
build.setMessage("JSON Failed")
.setNegativeButton("Retry",null)
.create()
.show();
}
}
};
RegisterRequest registerRequest = new RegisterRequest(name,username,password,email,contact,age,responseListener);
RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this);
queue.add(registerRequest);
}
});
}
}
公共类注册表活动扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u寄存器);
最终EditText etName=(EditText)findViewById(R.id.etName);
最终EditText etUsername=(EditText)findViewById(R.id.etUsername);
最终EditText etPassword=(EditText)findViewById(R.id.etPassword);
最终EditText etCPassword=(EditText)findViewById(R.id.etCPassword);
最终的EditText-etEmail=(EditText)findViewById(R.id.etEmail);
最终EditText etContact=(EditText)findViewById(R.id.etContact);
最终EditText etAge=(EditText)findViewById(R.id.etAge);
最终按钮btnRegister=(按钮)findViewById(R.id.btnRegister);
btnRegister.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
最终字符串名称=etName.getText().toString();
最终字符串username=etUsername.getText().toString();
最终字符串password=etPassword.getText().toString();
最终字符串email=etEmail.getText().toString();
final int age=Integer.parseInt(etAge.getText().toString());
final int contact=Integer.parseInt(etContact.getText().toString());
Response.Listener responseListener=新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
试一试{
JSONObject jsonResponse=新的JSONObject(响应);
boolean success=jsonResponse.getBoolean(“success”);
如果(成功){
意向意向=新意向(RegisterActivity.this、LoginActivity.class);
RegisterActivity.this.startActivity(意向);
}否则{
AlertDialog.Builder=新建AlertDialog.Builder(RegisterActivity.this);
builder.setMessage(“注册失败”)
.setNegativeButton(“重试”,null)
.create()
.show();
}
}捕获(JSONException e){
e、 printStackTrace();
AlertDialog.Builder build=新建AlertDialog.Builder(RegisterActivity.this);
setMessage(“JSON失败”)
.setNegativeButton(“重试”,null)
.create()
.show();
}
}
};
RegisterRequest RegisterRequest=新的RegisterRequest(姓名、用户名、密码、电子邮件、联系人、年龄、响应侦听器);
RequestQueue=Volley.newRequestQueue(RegisterActivity.this);
添加(registerRequest);
}
});
}
}
这是RegistryRequest.java
public class RegisterRequest extends StringRequest{
private static final String REGISTER_REQUEST_URL="https://smplycode.000webhostapp.com/Registerft.php";
private Map<String, String> params;
public RegisterRequest(String name,String username,String password,String email,int contact, int age, Response.Listener<String> listener) {
super(Method.POST, REGISTER_REQUEST_URL, listener, null);
params = new HashMap<>();
params.put("name",name);
params.put("username",username);
params.put("password",password);
params.put("email",email);
params.put("contact",contact+"");
params.put("age",age+"");
}
@Override
public Map<String, String> getParams() {return params;}
}
公共类RegisterRequest扩展了StringRequest{
专用静态最终字符串寄存器\u请求\u URL=”https://smplycode.000webhostapp.com/Registerft.php";
私有映射参数;
公共注册表请求(字符串名称、字符串用户名、字符串密码、字符串电子邮件、int联系人、int年龄、响应.侦听器){
super(Method.POST,REGISTER\u REQUEST\u URL,listener,null);
params=新的HashMap();
参数put(“名称”,名称);
参数put(“用户名”,用户名);
参数put(“密码”,密码);
参数put(“电子邮件”,电子邮件);
参数put(“contact”,contact+”);
参数put(“年龄”,年龄+”);
}
@凌驾
公共映射getParams(){return params;}
}
这是我的registerft.php文件
<?php
$con = mysqli_connect("localhost", "id20401_mydbname", "mydbpaord", "id2041_mydme");
$name = $_POST["name"];
$username = $_POST["username"];
$password = $_POST["password"];
$email = $_POST["email"];
$contact = $_POST["contact"];
$age = $_POST["age"];
$statement = mysqli_prepare($con, "INSERT INTO usersft (name, username, password, email, contact, age) VALUES (?, ?, ?, ?, ?, ?)");
mysqli_stmt_bind_param($statement, "ssssii", $name, $username,$password,$email,$contact, $age);
mysqli_stmt_execute($statement);
$response = array();
$response["success"] = true;
echo json_encode($response);
?>
我在youtube上观看了教程,这段代码正在编写该教程
如果有人想帮助我,请给我你的电子邮件ID,我正在做一个项目,我想制作一个C++学习的应用程序,用于新的用户: 首先打印出字符串,然后在代码> jsObjjjsRetry=新jSONoject(响应);code>这样你就知道它的格式是否正确了。Br是换行符的html标记,因此我认为您的响应是html而不是JSON我将首先尝试收集不同的答案和注释: 如果您在应用程序之外的
RegistryRequest.java
中进行POST调用(例如,使用curl-i-X POST--data“name=name&username=username&password=password&email=email&contact=123456789&age=21”https://smplycode.000webhostapp.com/Registerft.php
)您会看到一个带有错误消息的HTML页面(由其他人发布):
警告:mysqli_stmt_bind_param()要求参数1为mysqli_stmt,布尔值在第12行的/storage/ssd1/901/2049901/public_html/Registerft.php中给出
警告:mysqli_stmt_execute()要求参数1为mysqli_stmt,布尔值在第13行的/storage/ssd1/901/2049901/public_html/Registerft.php中给出
将此解释为JSON在第一个HTML标记(
)处失败,这就是错误消息的内容
现在,让我们尝试分析php错误消息,即找到根本原因:
创建db连接或生成语句失败,并返回一个布尔值false
,该值不是一个准备好的语句——因此在mysqli_stmt_bind_param()
上出现错误。有关详细信息,请参阅
请确保您的db查询正常运行,并且您的php页面返回一个有效的JSON服务器响应是什么?最重要的部分是了解您需要的JSON文本
<br />
<b>Warning</b>: mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, boolean given in <b>/storage/ssd1/901/2049901/public_html/Registerft.php</b> on line <b>12</b><br />
<br />
<b>Warning</b>: mysqli_stmt_execute() expects parameter 1 to be mysqli_stmt, boolean given in <b>/storage/ssd1/901/2049901/public_html/Registerft.php</b> on line <b>13</b><br />