title: JSON exception: Value <? of type java.lang.String cannot be converted to JSONObject
body: <p>i am making a login application on android i have used asynctask and Json to exchange data over server but i am getting this error i am adding the code.kindly help guys </p>
  
  <pre><code>    class RegisterUser extends AsyncTask&lt;Void, Void, String&gt; {
  
          private ProgressBar progressBar;
  
          @Override
          protected String doInBackground(Void... voids) {
              //creating request handler object
              RequestHandler requestHandler = new RequestHandler();
  
              //creating request parameters
              HashMap&lt;String, String&gt; params = new HashMap&lt;&gt;();
              params.put("username", username);
              params.put("email", email);
              params.put("password", password);
              params.put("gender", gender);
  
              //returing the response
              return requestHandler.sendPostRequest(URLs.URL_REGISTER, 
          params);
          }
  
          @Override
          protected void onPreExecute() {
              super.onPreExecute();
              //displaying the progress bar while user registers on the server
              progressBar = (ProgressBar) findViewById(R.id.progressBar);
              progressBar.setVisibility(View.VISIBLE);
          }
  
          @Override
          protected void onPostExecute(String s) {
              super.onPostExecute(s);
              //hiding the progressbar after completion
              progressBar.setVisibility(View.GONE);
              Log.i("JSON Parser", s);
              try {
                  //converting response to json object
                  JSONObject obj = new JSONObject(s);
                //  Log.i("JSON Parser", obj);
  
                  //if no error in response
                  if (!obj.getBoolean("error")) {
                      Toast.makeText(getApplicationContext(), 
       obj.getString("message"), Toast.LENGTH_SHORT).show();
  
                      //getting the user from the response
                      JSONObject userJson = obj.getJSONObject("user");
  
                      //creating a new user object
                      User user = new User(
                              userJson.getInt("id"),
                              userJson.getString("username"),
                              userJson.getString("email"),
                              userJson.getString("gender")
                      );
  
                      //storing the user in shared preferences
  
  
       SharedPrefManager.getInstance(getApplicationContext()).userLogin(user);
  
                      //starting the profile activity
                      finish();
                      startActivity(new Intent(getApplicationContext(), 
    ProfileActivity.class));
                  } else {
                      Toast.makeText(getApplicationContext(), "Some error 
   occurred", Toast.LENGTH_SHORT).show();
                  }
              } catch (JSONException e) {
                  e.printStackTrace();
                  Log.d("error is","this");
              }
          }
      }
  
      //executing the async task
      RegisterUser ru = new RegisterUser();
      ru.execute();
     }
  </code></pre>
  
  <p>and the funny thing is 
  the log.i below </p>
  
  <pre><code>  @Override
          protected void onPostExecute(String s) {
              super.onPostExecute(s);
              //hiding the progressbar after completion
              progressBar.setVisibility(View.GONE);
              Log.i("JSON Parser", s); 
  </code></pre>
  
  <p>is giving me the source code of both my php files</p>
  
  <p>my php files are below </p>
  
  <pre><code>&lt;?php
  
  require_once 'DbConnect.php';
  
  //an array to display response
  $response = array();
  mysqli_set_charset($con, 'utf8');
  //if it is an api call 
  //that means a get parameter named api call is set in the URL 
  //and with this parameter we are concluding that it is an api call
  
  if (isset($_GET['apicall'])) {
  
      switch ($_GET['apicall']) {
  
          case 'signup':
              //checking the parameters required are available or not 
  
  
  
              if (isTheseParametersAvailable
                              (array('username', 'email', 'password', 'gender'))) {
  
                  //getting the values 
                  $username = $_POST['username'];
                  $email = $_POST['email'];
                  $password = md5($_POST['password']);
                  $gender = $_POST['gender'];
  
                  //checking if the user is already exist with this username 
                  or email
                  //as the email and username should be unique for every user 
                  $stmt = $conn-&gt;prepare("SELECT id FROM users WHERE username 
          = ? OR email = ?");
                  $stmt-&gt;bind_param("ss", $username, $email);
                  $stmt-&gt;execute();
                  $stmt-&gt;store_result();
  
                  //if the user already exist in the database 
                  if ($stmt-&gt;num_rows &gt; 0) {
                      $response['error'] = true;
                      $response['message'] = 'User already registered';
                      $stmt-&gt;close();
                  } else {
  
                      //if user is new creating an insert query 
                      $stmt = $conn-&gt;prepare("INSERT INTO users (username, 
          email, password, gender) VALUES (?, ?, ?, ?)");
                      $stmt-&gt;bind_param("ssss", $username, $email, $password, $gender);
  
                      //if the user is successfully added to the database 
                      if ($stmt-&gt;execute()) {
  
                          //fetching the user back 
                          $stmt = $conn-&gt;prepare("SELECT id, id, username, 
            email, gender FROM users WHERE username = ?");
                          $stmt-&gt;bind_param("s", $username);
                          $stmt-&gt;execute();
                          $stmt-&gt;bind_result($userid, $id, $username, $email, $gender);
                          $stmt-&gt;fetch();
  
                          $user = array(
                              'id' =&gt; $id,
                              'username' =&gt; $username,
                              'email' =&gt; $email,
                              'gender' =&gt; $gender
                          );
  
                          $stmt-&gt;close();
  
                          //adding the user data in response 
                          $response['error'] = false;
                          $response['message'] = 'User registered 
                 successfully';
                          $response['user'] = $user;
                      }
                  }
              } else {
                  $response['error'] = true;
                  $response['message'] = 'required parameters are not 
              available';
              }
  
              break;
  
          case 'login':
              //for login we need the username and password 
              if (isTheseParametersAvailable(array('username', 'password'))) {
                  //getting values 
                  $username = $_POST['username'];
                  $password = md5($_POST['password']);
  
                  //creating the query 
                  $stmt = $conn-&gt;prepare("SELECT id, username, email, gender 
                 FROM users WHERE username = ? AND password = ?");
                  $stmt-&gt;bind_param("ss", $username, $password);
  
                  $stmt-&gt;execute();
  
                  $stmt-&gt;store_result();
  
                  //if the user exist with given credentials 
                  if ($stmt-&gt;num_rows &gt; 0) {
  
                      $stmt-&gt;bind_result($id, $username, $email, $gender);
                      $stmt-&gt;fetch();
  
                      $user = array(
                          'id' =&gt; $id,
                          'username' =&gt; $username,
                          'email' =&gt; $email,
                          'gender' =&gt; $gender
                      );
  
                      $response['error'] = false;
                      $response['message'] = 'Login successfull';
                      $response['user'] = $user;
                  } else {
                      //if the user not found 
                      $response['error'] = false;
                      $response['message'] = 'Invalid username or password';
                  }
              }
              break;
  
          default:
              $response['error'] = true;
              $response['message'] = 'Invalid Operation Called';
      }
  } else {
      //if it is not api call 
      //pushing appropriate values to response array 
      $response['error'] = true;
      $response['message'] = 'Invalid API Call';
  }
  
  //displaying the response in json structure 
  echo json_encode($response);
  
  //function validating all the paramters are available
  //we will pass the required parameters to this function 
  function isTheseParametersAvailable($params) {
  
      //traversing through all the parameters 
      foreach ($params as $param) {
          //if the paramter is not available
          if (!isset($_POST[$param])) {
              //return false 
              return false;
          }
      }
      //return true if every param is available 
      return true;
  }
  </code></pre>
  
  <p>i am new to android and java and learning on my own. i found this code on some website and tried to execute it but its giving this error.
  help </p>