1

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;

    }
4

1 回答 1

1

如日志:

解析器:解析数据时出错 org.json.JSONException:Java.lang.String 类型的值成功无法转换为 JSONObject

意味着不JSONObject从服务器获取,而只是从服务器获取Success字符串作为响应。

因此,无需转换jsonJSONObject. 进行以下更改以使其正常工作:

1.makeHttpRequest将方法的返回类型更改为String并返回json(删除或注释jObj = new JSONObject(json);行)

2.doInBackground调用makeHttpRequest方法为:

String response = jsonParser.makeHttpRequest(LOGIN_SUCCESS_URL,
                                            "POST", 
                                             postParameters);
if(response.toLowerCase().contains("success")){
  /// do task
}else{
  // do task
}
于 2015-11-06T18:43:18.993 回答