title: error: org.json.JSONEXception: Value Access of type java.lang.String cannot be converted to JSONObject
body: <p>I'm trying to make an android login app, and as you can see you can login using the login button. It will send a POST request to the server and the server will return JSON data. My app receives the data but cannot parse it. It doesn't do anything after this, but I first want to get this working. Here is my code:</p>
  
  <p><strong>MainActivity.java</strong></p>
  
  <pre><code>public class MainActivity extends Activity {
  
  
  private static String readAll(Reader rd) throws IOException {
      StringBuilder sb = new StringBuilder();
      int cp;
      while ((cp = rd.read()) != -1) {
        sb.append((char) cp);
      }
      return sb.toString();
    }
  
    public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
      InputStream is = new URL(url).openStream();
      try {
        BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
        String jsonText = readAll(rd);
        JSONObject json = new JSONObject(jsonText);
        return json;
      } finally {
        is.close();
      }
    }
  
    private EditText inpUsername;
    private EditText inpPassword;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      inpUsername = (EditText) findViewById(R.id.inpUsername);
      inpPassword = (EditText) findViewById(R.id.inpPassword);
  
  }
  
  public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
  }
  
  public void checkLogin(View v)
  {
      new DoLoginAsyncTask().execute();
  }   
  
    private class DoLoginAsyncTask extends AsyncTask&lt;String, Void, String&gt; {      
      private ProgressDialog LoadingDialog;
      String response = "";
  
      String LoadingDialogLoggingIn = getResources().getString(R.string.logging_in);
  
  
  
      @Override
      protected void onPreExecute() {
          LoadingDialog = new ProgressDialog(MainActivity.this);
          LoadingDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
          LoadingDialog.setMessage(LoadingDialogLoggingIn);
          LoadingDialog.setCancelable(false);
          LoadingDialog.show();
      }
  
      @Override
      protected String doInBackground(String... params) {
          String username = inpUsername.getText().toString();
          String password = inpPassword.getText().toString();
  
          // Creating HTTP client
          HttpClient httpClient = new DefaultHttpClient();
  
          // Creating HTTP Post
          HttpPost httpPost = new HttpPost("http://mysite/");
  
          // Building post parameters
          // key and value pair
          List&lt;NameValuePair&gt; nameValuePair = new ArrayList&lt;NameValuePair&gt;(2);
          nameValuePair.add(new BasicNameValuePair("tag", "login"));
          nameValuePair.add(new BasicNameValuePair("username", username));
          nameValuePair.add(new BasicNameValuePair("password", password));
  
          // Url Encoding the POST parameters
          try {
              httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
          } catch (UnsupportedEncodingException e) {
              // writing error to Log
              e.printStackTrace();
              response = response+"printStackTrace";
          }
  
          // Making HTTP Request
          try {
              HttpResponse response = httpClient.execute(httpPost);
  
              // writing response to log
              Log.d("Http Response:", response.toString());
          } catch (ClientProtocolException e) {
              // writing exception to log
              e.printStackTrace();
              response = response+"ClientProtocolException";
          } catch (IOException e) {
              // writing exception to log
              e.printStackTrace();
              response = response+"IOException";
          } 
  
          try{
              JSONObject json = readJsonFromUrl("http://mysite/");
              System.out.println(json.toString());
              System.out.println(json.get("id"));
          } catch(IOException e) {
              e.printStackTrace();
          } catch (JSONException e) {
              e.printStackTrace();
          }
  
  
  
          return response;
      }
  
      @Override
      protected void onPostExecute(String result) {
          LoadingDialog.dismiss();
          LoadingDialog = null;
          if(response != "") {
              Toast.makeText(getApplicationContext(), response, Toast.LENGTH_LONG).show();
          }
      }
  
  
  
  
  }
  
  }
  </code></pre>
  
  <p><strong>PHP code on the server:</strong></p>
  
  <pre><code>&lt;?php
  header('Content-type: application/json; charset=utf-8');
  if (isset($_REQUEST['tag']) &amp;&amp; $_REQUEST['tag'] != '') {
  $tag = $_REQUEST['tag'];
  require 'config.php';
  $response = array("tag" =&gt; $tag, "success" =&gt; 0, "error" =&gt; 0);
  mysql_connect("$mysql_host", "$mysql_username", "$mysql_password") or die(mysql_error()); 
  mysql_select_db("$mysql_db_name") or die(mysql_error());
  
  
  if($tag='login') {
      if(isset($_REQUEST['username']) &amp;&amp; $_REQUEST['username'] != '' &amp;&amp; isset($_REQUEST['password']) &amp;&amp; $_REQUEST['password'] != '') {
          $username = $_REQUEST['username'];
          $password = $_REQUEST['password'];
          $hash = md5($password);
          $search = mysql_query("SELECT * FROM users WHERE username='".$username."' AND password='".$hash."' AND active='1'") or die(mysql_error());
          $match  = mysql_num_rows($search);
          $result = mysql_fetch_array($search);
          if($match &gt; 0) {
              $response['tag']="login";
              $response['success']="1";
              $response['error']="0"; 
              $response['uid']=$result['id'];
              $response['username']=$result['username'];
              $response['name']=$result['name'];
              $response['surname']=$result['surname'];
              $response['email']=$result['email'];
          } else {
              $response['tag']="login";
              $response['success']="0";
              $response['error']="10";
          }
      } else {
          //username or password not filled in
          $response['tag']="login";
          $response['success']="0";
          $response['error']="11";
      }
  }
  
  
  
              echo json_encode($response);
  
  } else {
  echo 'Access denied';
  }
  ?&gt;
  </code></pre>
  
  <p><strong> example JSON response from server:</strong></p>
  
  <pre><code>{"tag":"login","success":"0","error":"10"}
  </code></pre>
  
  <p><strong> The error I get from LogCat:</strong></p>
  
  <pre><code>org.json.JSONException: Value Access of type java.lang.String cannot be converted to JSONObject
  at org.json.JSON.typeMismatch(JSON.java:107)
  at org.json.JSONObject.&lt;init&gt;(JSONObject.java:158)
  at org.json.JSONObject.&lt;init&gt;(JSONObject.java:171)
  at com.example.myapp.MainActivity.readJsonFromUrl(MainActivity.java:56)
  at com.example.myapp.MainActivity$DoLoginAsyncTask.doInBackground(MainActivity.java:147)
  at com.example.myapp.MainActivity$DoLoginAsyncTask.doInBackground(MainActivity.java:1)
  at android.os.AsyncTask$2.call(AsyncTask.java:185)
  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
  at java.util.concurrent.FutureTask.run(FutureTask.java:138)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
  at java.lang.Thread.run(Thread.java:1019)
  </code></pre>
  
  <p>I hope you can help me with my problem.</p>