2017-11-21 12 views
0

onErrorResponse에서 내 오류를 인쇄하고 싶습니다. 을 다른 textview에 인쇄하고 싶은데, 안드로이드에 volley을 사용하고 있습니다. onErrorResponseandroid에서 발리를 사용하여 오류 처리

{ 
    "message": "422 Unprocessable Entity", 
    "error": { 

     "username": [ 
      "The username has already been taken." 
     ], 
     "email": [ 
      "The email has already been taken." 
     ] 
    }, 
    "status_code": 422 
} 

에서

내 오류가 그래서 내가 2 textviewtextviewThe email has already been taken.에서 The username has already been taken.을 의미 , 별도로 인쇄 할. 감사

내 코드 :

public void postData(JSONObject jsonObject) {  
    String url = "http://www.xxxxxxxx.com/api/v1/auth/register"; 
    String REQUEST_TAG = "volley_key";  
    JsonObjectRequest jsonObjectReq = new JsonObjectRequest(Request.Method.POST, url, jsonObject, 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 

        try { 
         verifyResponse(response); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) {    
      NetworkResponse networkResponse = error.networkResponse; 
      if (networkResponse != null && networkResponse.data != null) { 
       String errorStr = new String(networkResponse.data);     
       try { 
        JSONObject jObj = new JSONObject(errorStr); 
        JSONObject objError = jObj.getJSONObject("error"); 
        JSONArray emailArray = objError.getJSONArray("email"); 
        if (emailArray != null) { 
         String emailMessage = String.valueOf(emailArray.get(0)); 
         Toast.makeText(getApplication(), emailMessage, Toast.LENGTH_LONG).show(); 
        } 
        JSONArray usernameArray = objError.getJSONArray("username"); 
        if (usernameArray != null) { 
         String usernameMessage = String.valueOf(emailArray.get(0)); 
         Toast.makeText(getApplication(), usernameMessage, Toast.LENGTH_LONG).show(); 
        } 

       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }){ 
     @Override 
     protected VolleyError parseNetworkError(VolleyError volleyError) { 

      if (volleyError.networkResponse != null && volleyError.networkResponse.data != null) { 
       VolleyError error = new VolleyError(new String(volleyError.networkResponse.data)); 
       volleyError = error; 
      } 
      return volleyError; 
     } 
    };  VolleySingleton.getInstance(getApplicationContext()).addToRequestQueue(jsonObjectReq, REQUEST_TAG); 
} 
+0

좋아 ... 구문 분석하여 JSON을 오류 텍스트를 설정하고 텍스트 뷰를 설정 ... 문제는 무엇입니까? –

+1

나는이 질문에 답하고있는 것이 아니라 '이름 필드가 필요합니다.'아마도 이것은 클라이언트 측에서해야 할 것입니다. '이메일은 이미 가져갔습니다 .' 괜찮습니다. – Wizard

+0

@Wizard, 예 좋습니다. "사용자 이름이 이미 사용되었습니다."라고 인쇄하고 싶습니다. 전자 메일은 이미 사용되었습니다. 감사합니다 – Dinesh

답변

0

당신이 오류 개체 내부의 키를 확인할 수 있습니다 단순히 키이 존재하는 특정 텍스트 뷰에 대한 오류를 표시하면 확인할 수 있습니다. 여기에 예제가 있습니다. 저는 JsonObject 클래스 인 volley를 사용하고 있습니다. 즉, 응답은 JsonObject에 있습니다.

JsonObject obj=response.getAsJsonObject("error"); 
if(obj.has("name")){ 
    nameTextView.setText(obj.getAsJsonArray("name").get(0)+""); 
} 
if(obj.has("username")){ 
    usernameTextView.setText(obj.getAsJsonArray("username").get(0)+""); 
} 
if(obj.has("email")){ 
    emailTextView.setText(obj.getAsJsonArray("email").get(0)+""); 
} 
+0

코드가 많은 구문 오류 (닫는 대괄호, 큰 따옴표 누락)를 가지고 있습니다. –

+0

@Chandan Bhandari broz가 올바르게 작동하지 않습니다. – Dinesh

0

java 폴더에 ErrorModel.class 및 Error 클래스를 추가하십시오. texView에

package co.exmaple; 

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class ErrorModel { 

    @SerializedName("message") 
    @Expose 
    private String message; 
    @SerializedName("error") 
    @Expose 
    private Error error; 
    @SerializedName("status_code") 
    @Expose 
    private Integer statusCode; 

    public String getMessage() { 
     return message; 
    } 

    public void setMessage(String message) { 
     this.message = message; 
    } 

    public Error getError() { 
     return error; 
    } 

    public void setError(Error error) { 
     this.error = error; 
    } 

    public Integer getStatusCode() { 
     return statusCode; 
    } 

    public void setStatusCode(Integer statusCode) { 
     this.statusCode = statusCode; 
    } 

} 

Erro.class 그런

package co.exmaple; 

import java.util.List; 
import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Error { 

    @SerializedName("name") 
    @Expose 
    private List<String> name = null; 
    @SerializedName("username") 
    @Expose 
    private List<String> username = null; 
    @SerializedName("email") 
    @Expose 
    private List<String> email = null; 

    public List<String> getName() { 
     return name; 
    } 

    public void setName(List<String> name) { 
     this.name = name; 
    } 

    public List<String> getUsername() { 
     return username; 
    } 

    public void setUsername(List<String> username) { 
     this.username = username; 
    } 

    public List<String> getEmail() { 
     return email; 
    } 

    public void setEmail(List<String> email) { 
     this.email = email; 
    } 

} 

StringError에 요청 설정 오류 텍스트입니다.

StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 



      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
GsonBuilder gsonBuilder = new GsonBuilder(); 
       Gson gson = gsonBuilder.create(); 
       ErrorModel error = gson.fromJson(response,ErrorModel.class); 
       recyclerView.setAdapter(new ErrorAdapter(ErrorActivity.this,error.getError)); 
      } 
     }); 

     RequestQueue requestQueue = Volley.newRequestQueue(this); 
     requestQueue.add(stringRequest); 

만들기 RecyclerView 어댑터가 텍스트 뷰에