2017-11-21 18 views
0

私はエラーをonErrorResponseからアンドロイドのvolleyを使用して印刷したいと思います。separatelyを別のtextviewに印刷したいとします。 onErrorResponseアンドロイドでボレーを使用したエラー処理

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

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

から

私のエラーので、私は第二textviewに1 textviewThe username has already been taken.The email 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

にエラーテキストを設定するにはRecyclerViewアダプタがわかりました...あなたのJSONをパースしてのTextViewを設定してください...問題は何ですか? –

+1

私はこの質問に答えるつもりはありませんが、「名前フィールドは必須です」おそらくこれはクライアント側で行うべきでしょう。 '電子メールはすでに取られています.'これは問題ありません。 – Wizard

+0

@Wizard、はいいいえ、私は "ユーザー名は既に取得されています"と印刷したい、電子メールはすでに取得されています。 – Dinesh

答えて

0

エラーオブジェクト内のキーを確認することができますし、単にキーが、その後存在する特定のTextViewのエラーを表示するかどうかを確認することができます。 ここに例があります。私はあなたがvolleyのJsonObjectクラスを使用している、すなわち応答が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 plzはそれを修正します。 – Dinesh

0

ErrorModel.classとErrorクラスをjavaフォルダに追加します。

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リクエスト・セット・エラー・テキストでtexViewに。

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

のTextView

関連する問題