2015-11-06 142 views
1

我收到了錯誤:JSON解析器:解析數據時出錯org.json.JSONException:成功= JSON.getBoolean(SUCCESS)時無法將java.lang.String類型的成功轉換爲JSONObject;解析JSON值時出錯

我搜索了周圍SO和互聯網,我仍然不明白我做錯了什麼。

我的JSON的樣子:成功

@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; 

    } 
+0

顯示錯誤日誌或從'Log.v(「json」,json.toString())服務器獲取的響應;'行 –

+0

如果你是使用IntelliJ或Android Studio,嘗試在'success = json.getBoolean(SUCCESS)'行設置斷點並在本地控制檯中測試JSON。 –

+0

@ρяσѕρєяK空指針異常,因爲makeHttpRequest無法完成,因爲錯誤解析數據org.json.JSONException:值類型java.lang.String的成功不能轉換爲JSONObject – JohnWilliams

回答

1

如日誌:

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

手段無法從服務器獲取JSONObject但剛開Success String作爲從服務器響應。

因此,不需要將json轉換爲JSONObject。做如下修改,以得到它的工作:

更改返回類型的 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 
} 
+0

@JohnWilliams:試試我的答案並讓我知道結果 –

+0

異常'org.json.JSONException'永遠不會拋出相應的try塊。更新。 – JohnWilliams

+0

@JohnWilliams:顯示更新的代碼和日誌 –