android - 在Android中使用Volley进行错误处理

标签 android json error-handling android-volley

我想使用android中的onErrorResponsevolley打印我的错误,我想以不同的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
}

所以我想分别打印
我的意思是在一个The username has already been taken.中的textview和在第二个The email has already been taken.中的textview。谢谢

我的代码:
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);
}

最佳答案

将那里的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;
    }

}

错误类
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请求中将Error文本设置为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);

使RecyclerView适配器将错误文本设置为TextView

关于android - 在Android中使用Volley进行错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47406363/

相关文章:

java - 将数组传递给 Activity (Android)

android - 从 Android 设备登录到 symfony

javascript - 从 json 创建一个 Chart.js 点数据集

Java hashCode() 在同一对象创建的不同执行中有所不同

java - 智能手机:不支持java

java - 在 RecyclerView 中看不到任何条目

javascript - 我可以在不使用整个 Meteor 或 Blaze 框架的情况下使用 Minimongo 吗?

php - 如何捕获PHP snmpwalk警告?

windows - "was unexpected at this time."

python - 需要替换几个文本文件中每一行的第一个单词