JohnWilliams
JohnWilliams

Reputation: 139

Error parsing JSON value

I received the error: JSON Parser﹕ Error parsing data org.json.JSONException: Value Success of type java.lang.String cannot be converted to JSONObject at success = json.getBoolean(SUCCESS);

I searched around SO and the Internet and I am still not understanding what I am doing wrong.

My JSON looks like: Success

  @Override
protected Boolean doInBackground(Void... params) {
    //Log.v("LoginActivity", "UserLoginTask-AsyncTask-doinBackground");
    Boolean success;
    String username = mUsernameView.getText().toString();
    String password = mPasswordView.getText().toString();

    try {

        //Building Parameters
        ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
        postParameters.add(new BasicNameValuePair("username", mUsernameView.getText().toString()));
        postParameters.add(new BasicNameValuePair("password", mPasswordView.getText().toString()));

        Log.d("request!", "starting");

        //getting product details by making HTTP request
        //JSONObject json = jsonParser.makeHttpRequest(LOGIN_SUCCESS_URL, "POST", postParameters);
        //Error parsing data org.json.JSONException:
        //Value Success of type java.lang.String cannot be converted to JSONObject

        String response = jsonParser.makeHttpRequest(LOGIN_SUCCESS_URL, "POST", postParameters);
        Log.v("SUCCESS", SUCCESS.toString());

        // Log.v("json", json.toString()); //null
        //success = json.getBoolean(SUCCESS);

        //if (success == true) {
        if (response.toLowerCase().contains("success")) {
            // Log.d("Login Successful!", json.toString());
            Toast.makeText(LogIn.this, "Login Successful!", Toast.LENGTH_LONG).show();
            Intent i = new Intent(getApplicationContext(), Main.class);
            finish();
            startActivity(i);
            //return json.getBoolean(FAILURE);
        } else {
            //Log.d("Login Failure!", json.getString(FAILURE));
             Toast.makeText(LogIn.this, "Login Fail!", Toast.LENGTH_LONG).show();
            Intent i = new Intent(getApplicationContext(), MainActivity.class);
            finish();
            startActivity(i);
        }
         } catch (JSONException e) { //error here
         e.printStackTrace();
         }

        return null;
    }
}

public String makeHttpRequest(String url, String method, List<NameValuePair> params) {
        // Making HTTP request
        try {

            // check for request method
            if(method == "POST"){
                // request method is POST
                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                Log.v("makeHttpRequest client", httpClient.toString());
                HttpPost httpPost = new HttpPost(url);
                Log.v("makeHttpRequest post", httpPost.toString());
                httpPost.setEntity(new UrlEncodedFormEntity(params));

                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
                Log.v("makeHttpRequest is", is.toString());

            }else if(method == "GET"){
                // request method is GET
                DefaultHttpClient httpClient = new DefaultHttpClient();
                String paramString = URLEncodedUtils.format(params, "utf-8");
                url += "?" + paramString;
                HttpGet httpGet = new HttpGet(url);

                HttpResponse httpResponse = httpClient.execute(httpGet);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
            }

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            //BufferedReader reader = new BufferedReader(new InputStreamReader(
                   // is, "iso-8859-1"), 8);
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, HTTP.UTF_8), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
            Log.v("json=sb", sb.toString());
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        return json;

    }

Upvotes: 2

Views: 5113

Answers (1)

ρяσѕρєя K
ρяσѕρєя K

Reputation: 132972

As in log:

Parser﹕ Error parsing data org.json.JSONException: Value Success of type java.lang.String cannot be converted to JSONObject

Means not getting JSONObject from server but just getting Success String as response from server.

So, no need to convert json to JSONObject. do following change to get it work :

1. Change return type of makeHttpRequest method to String and return json(remove or comment jObj = new JSONObject(json); line )

2. In doInBackground call makeHttpRequest method as:

String response = jsonParser.makeHttpRequest(LOGIN_SUCCESS_URL,
                                            "POST", 
                                             postParameters);
if(response.toLowerCase().contains("success")){
  /// do task
}else{
  // do task
}

Upvotes: 1

Related Questions