Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获得;无法将java.lang.String转换为JSONObject“;如何纠正错误_Java_Php_Android_Sql_Json - Fatal编程技术网

获得;无法将java.lang.String转换为JSONObject“;如何纠正错误

获得;无法将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

在我的应用程序中获取此错误

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.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 />