2016-04-26 10 views
5

ist 3.2.0 Ich bin mit okHttp und hier ist der Code für Objektanforderung Gebäudewie Antworttext in okhttp zu erhalten, wenn Code 401

MediaType JSON = MediaType.parse(AppConstants.CONTENT_TYPE_VALUE_JSON); 
RequestBody body = RequestBody.create(JSON, requestBody); 


    HttpUrl url = new HttpUrl.Builder() 
            .scheme("http") 
            .host("192.168.0.104") 
            .port(8080) 
            .addPathSegment("mutterfly-server") 
            .addPathSegment("j_spring_security_check") 
            .addQueryParameter("j_username", jsonObject.getString("emailId")) 
            .addQueryParameter("j_password", jsonObject.getString("password")) 
            .build(); 

    request = new Request.Builder() 
            .addHeader(AppConstants.CONTENT_TYPE_LABEL, AppConstants.CONTENT_TYPE_VALUE_JSON) 
            .addHeader(AppConstants.ACCEPT_LABEL, AppConstants.CONTENT_TYPE_VALUE_JSON) 
            .url(url) 
            .post(body) 
            .build(); 

Und hier ist, wie ich die Antwort

client.newCall(request).enqueue(new Callback() { 
       @Override 
       public void onFailure(Call call, IOException e) { 

       } 

       @Override 
       public void onResponse(Call call, final Response response) throws IOException { 

        String respBody; 
        if (response.isSuccessful()) { 
         if (response.body() != null) { 
          respBody = response.body().string(); 
          Log.i(TAG, respBody); 
          response.body().close(); 
          if (AppMethods.checkIfNull(loginParserListener)) { 
           try { 
            final VUser user = AppMethods.getGsonInstance().fromJson(respBody, VUser.class); 
           } catch (Exception e) { 

           } 
          } 
         } 
        } else { 

         switch (response.code()){ 
          case 401: 
           String body="HTTP_UNAUTHORIZED"; 
           break; 
         } 
        } 
       } 
      }); 
analysieren

Dies ist die ideale Antwort (vom Web Rest Client), wenn die Authentifizierung fehlgeschlagen ist.

{"msgDesc":"The username or password you entered is incorrect..","statusCode":401} 

EDIT:

response.toString() kehrt

Response{protocol=http/1.1, code=401, message=Unauthorized, url=http://192.168.0.104:8080/mutterfly-server/[email protected]&j_password=1} 

response.body().toString() kehrt

[email protected] 

i die 'msgDesc' holen will, die in Reaktion Körper ist. Gibt es irgendeine Methode, die diese Zeichenfolge zurückgibt?

Antwort

5

Versuchen Sie folgendes:

switch (response.code()){ 
     case 401: 
      JsonObject object=new JsonObject(response.body().string()); 
      String body=object.getString("msgDesc"); 
      break; 
} 
+0

response.toString() gibt Response {Protokoll = http/1.1, Code = 401 , message = Nicht autorisiert, url = http: //192.168.0.104: 8080/mutterfly-server/j_spring_security_check? [email protected]&j_password=1} –

+0

Überprüfen Sie die aktualisierte Antwort –

+0

danke für die Antwort, aber ich habe den Beitrag mit bearbeitet die Antwort überprüfen, dass –

-1

401 bedeutet permission denied.

Überprüfen Sie, ob token gültig ist oder user/password korrekt ist.

+1

kein Token erzeugt ist, wie ich Benutzer anmelden versuchen. und mehr über ich möchte den Fall zu testen, wenn Benutzer die falschen Anmeldeinformationen eingegeben, so kann ich Benutzer mit der 'msgDesc' vom Server empfangen. –

3

Es ist ziemlich komisch, aber Platz, das Unternehmen hinter OkHttp, hat sich entschieden, nicht ‚toString()‘ zu verwenden, aber ‚string()‘ als Methode für das Erhalten der Körper als String .

So funktioniert das;

String string = response.body().string(); 
//convert to JSON and get your value 

Aber dies nicht:

String string = response.body().toString(); 
+1

ja das ist das komische Ding. –