Error: org.json.JSONException: java.lang.String类型的值<br不能转换为J


Error: org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject

我知道我在SO上看到过所有类似的问题。我试图解决这个错误,但我失败了。我几乎什么都试过了,但都没有解决。

我的代码如下:-
public class Tab2 extends Fragment {
private static String TAG = Tab2.class.getSimpleName();
private EditText editText1,editText2,editText3;
private Button button;
private String name,email,password;
private TextInputLayout inputLayoutName, inputLayoutEmail, inputLayoutPassword;
private ProgressDialog pDialog;
private SessionManager session;
private database db;
static InputStream is = null;
static JSONObject jObj = null;
static String json = null;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.tab2,container,false);
    pDialog = new ProgressDialog(getActivity());
    pDialog.setCancelable(false);
    // Session manager
    session = new SessionManager(getActivity());
    // SQLite database handler
    db = new database(getActivity());
    // Check if user is already logged in or not
    if (session.isLoggedIn()) {
        // User is already logged in. Take him to main activity
        Intent intent = new Intent(getActivity(),MainActivity.class);
        startActivity(intent);
    }

    editText1 = (EditText)view.findViewById(R.id.name);
    editText2 = (EditText)view.findViewById(R.id.email);
    editText3 = (EditText)view.findViewById(R.id.password);
    inputLayoutEmail = (TextInputLayout)view. findViewById(R.id.view1);
    inputLayoutPassword = (TextInputLayout)view. findViewById(R.id.view2);
    inputLayoutName = (TextInputLayout)view. findViewById(R.id.view3);
    button = (Button)view.findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view1) {
            name = editText1.getText().toString().trim();
            email = editText2.getText().toString().trim();
            password = editText3.getText().toString().trim();
            if (!validateName() || !validateEmail() || !validatePassword() ) {
                Log.d(TAG, "Successfull");
                return;
            }
               try {
                   new Thread(new Runnable() {
                       @Override
                       public void run() {
                           registerUser(name, email, password);
                       }
                   }).start();
               }catch (NullPointerException e){
                   e.printStackTrace();
               }

            Toast.makeText(getActivity(), "Account Created Successfully!", Toast.LENGTH_SHORT).show();
            Intent i = new Intent(getActivity(), MainActivity.class);
            startActivity(i);
        }

    });

    return view;
}
public boolean validateName(){
    if(name.isEmpty() ) {
        inputLayoutName.setError(getString(R.string.error_name1));
        return false;
    }
    else if(name.length()<3){
        inputLayoutName.setError(getString(R.string.error_name2));
        return false;
    }
    else
        inputLayoutName.setErrorEnabled(false);
    return true;
}
public boolean validateEmail(){
    if(email.isEmpty() || !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()){
        inputLayoutEmail.setError(getString(R.string.error_email));
        return false;
    }
    else
        inputLayoutEmail.setErrorEnabled(false);
    return true;
}
public boolean validatePassword(){
    if(password.isEmpty() ){
        inputLayoutPassword.setError(getString(R.string.error_password1));
        return false;
    }
    else if(password.length()<4){
        inputLayoutPassword.setError(getString(R.string.error_password2));
        return false;
    }
    else
        inputLayoutPassword.setErrorEnabled(false);
    return true;
}

public void registerUser(final String name, final String email, final String password){
    String req = "req_request";
    pDialog.setMessage("Registering ...");
    showDialog();
    RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
    StringRequest strReq = new StringRequest(Request.Method.POST, appConfig.url_sign, new Response.Listener<String>(){
        @Override
        public void onResponse(String response) {
          try {

               JSONObject jObj = new JSONObject(response);
                boolean error = jObj.getBoolean("error");
                Log.d(TAG,name + " " + email + " " + password );
                if (!error) {
                    String uid = jObj.getString("uid");
                    JSONObject user = jObj.getJSONObject("user");
                    String name = user.getString("name");
                    String email= user.getString("email");
                    String created_at = user.getString("created_at");
                    db.addUser(name, email, uid, created_at);
                  Toast.makeText(getActivity(), "User successfully registered. Try login now!", Toast.LENGTH_LONG).show();
                    // Launch login activity
                    Intent i = new Intent(
                            getActivity(),
                            Login.class);
                    startActivity(i);

                }
                else {
                    String errorMsg = jObj.getString("error_msg");
                    Toast.makeText(getActivity(),
                            errorMsg, Toast.LENGTH_LONG).show();
                }


            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            NetworkResponse networkResponse = error.networkResponse;
            if (networkResponse != null) {
                Log.e("Volley", "Error. HTTP Status Code:"+networkResponse.statusCode);
            }
            if (error instanceof TimeoutError) {
                Log.e("Volley", "TimeoutError");
            }else if(error instanceof NoConnectionError){
                Log.e("Volley", "NoConnectionError");
            } else if (error instanceof AuthFailureError) {
                Log.e("Volley", "AuthFailureError");
            } else if (error instanceof ServerError) {
                Log.e("Volley", "ServerError");
            } else if (error instanceof NetworkError) {
                Log.e("Volley", "NetworkError");
            } else if (error instanceof ParseError) {
                Log.e("Volley", "ParseError");
            }
            //Log.e(TAG, "Registration Error: " + error.getMessage());
         //   Toast.makeText(getActivity(),
           //         error.getMessage(), Toast.LENGTH_LONG).show();
          //  hideDialog();
        }
    }) {
        @Override
        protected Map<String, String> getParams() {
            // Posting params to register url
            Map<String, String> params = new HashMap<String, String>();
            params.put("name", name);
            params.put("email", email);
            params.put("password", password);
            return params;
        }
    };
    int socketTimeout = 10000;//30 seconds - change to what you want
    RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
    strReq.setRetryPolicy(policy);
    requestQueue.add(strReq);
}
private void showDialog() {
    if (!pDialog.isShowing())
        pDialog.show();
}
private void hideDialog() {
    if (pDialog.isShowing())
        pDialog.dismiss();
}
}
这是我的php文件
<?php
$response = array();
if (isset($_POST['name']) && isset($_POST['email']) && isset   ($_POST['password'] ))   
{  
  $name = $_POST['name'];
  $email = $_POST['email'];
  $password = $_POST['password'];

require_once __DIR__ . '/db_connection.php';
$db = new DB_CONNECT();
$result = mysql_query("Insert into words(name,email,password) values('$name','$email','$password')");
if ($result)
{
    $response["success"] = 1;
    $response["message"] = "Registration successfully.";
    echo json_encode($response);
}
else
{
  $response["success"] = 0;
  $response["message"] = "Oops! An error occurred.";
  echo json_encode($response);  
}
}
 else 
 {
   $response["success"] = 0;
   $response["message"] = "Required field(s) is missing";
   echo json_encode($response);
  } 
 ?>
我的JSON响应是:-
{"success":0,"message":"Required field(s) is missing"}

请告诉我错误在哪里

@Kartikeya Garg,您可能会从API获得html响应或错误,并且您正试图将这些响应转换为JSON对象,您的响应没有有效的JSON。

你可以尝试邮差,你可以安装在chrome上。这样你就可以直接从API得到响应。你实际上得到的是

你可以通过编程打印你的响应,我相信你的响应与你发布的不一样