Eroare de analiză a valorii JSON (Programare, Android, Json, Jsonexception)

JohnWilliams a intrebat.
a intrebat.

Am primit eroarea: JSON Parser﹕ Error parsing data org.json.JSONException: Valoarea Success de tip java.lang.String nu poate fi convertită în JSONObject la success = json.getBoolean(SUCCESS);

Am căutat în SO și pe internet și tot nu înțeleg ce greșesc.

JSON-ul meu arată astfel: Succes

  @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 + "
");
            }
            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;

    }

Comentarii

  • Afișați jurnalul de erori sau răspunsul care se obține de la server în Log.v("json", json.toString()); linie –  > Por ρяσѕρєя K.
  • Dacă utilizați IntelliJ sau Android Studio, încercați să setați un punct de întrerupere la punctul success = json.getBoolean(SUCCESS); linie și testați JSON-ul în consola locală. –  > Por Jack Ryan.
  • @ρяσѕρєяK Excepție de pointer nul deoarece makeHttpRequest nu poate fi finalizat deoarece Error parsing data org.json.JSONException: Valoarea Success de tip java.lang.String nu poate fi convertită în JSONObject –  > Por JohnWilliams.
  • unde sunt datele json? –  > Por Androider.
  • @JohnWilliams: vreo problemă în afișarea datelor json sau a jurnalului complet de erori ? –  > Por ρяσѕρєя K.
1 răspunsuri
ρяσѕρєя K

Ca și în jurnal:

Parser﹕ Eroare de analiză a datelor org.json.JSONException: Valoarea Success de tip java.lang.String nu poate fi convertită în JSONObject

Înseamnă că nu se obține JSONObject de la server, ci doar primește Success String ca răspuns de la server.

Prin urmare, nu este necesară conversia json în JSONObject. efectuați următoarea modificare pentru a face să funcționeze:

1. Schimbați tipul de returnare al makeHttpRequest în String și return json(eliminați sau comentați jObj = new JSONObject(json); linie )

2. În doInBackground apelați makeHttpRequest ca:

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

Comentarii

  • @JohnWilliams: încercați răspunsul meu și anunțați-mi rezultatul –  > Por ρяσѕρєя K.
  • Excepția ‘org.json.JSONException’ nu este niciodată aruncată în blocul de încercare corespunzător. Actualizat. –  > Por JohnWilliams.
  • Actualizat. Codul nu va rula deoarece Error:(334, 20) error: exception JSONException is never thrown in body of corresponding try statement at catch (JSONException e) –  > Por JohnWilliams.
  • @JohnWilliams: tipul a eliminat, de asemenea, blocul try-catch din makeHttpRequest în care jObj = new JSONObject(json); linia înfășurată –  > Por ρяσѕρєя K.
  • @JohnWilliams: ok schimbare JSONException în Exception –  > Por ρяσѕρєя K.