簡體   English   中英

如何自定義Volley庫以將發布請求作為Java對象進行獲取以作為Java對象獲得響應

[英]How can I Customize Volley Library to make post request as java object to get response as java Object

我使用的框架中只是傳遞了一個Java對象。 框架方法和類將此對象轉換為json字符串,並發出發布請求。 我也得到響應作為java對象。

我想使用排球庫實現同樣的事情

我只想傳遞Java請求對象,而作為響應,也要傳遞Java對象

請給我建議一種方法。

謝謝...

我有一些可以幫助您入門的東西。 只需在傳遞期望的響應的位置創建BaseRequest。 Son庫負責將Json轉換為Java Object類型。

基本請求

public class BaseRequest<T> extends Request<T> {

private final Class<T> resultClass;
private final Response.Listener<T> listener;
Gson gson = new Gson();

private final int REQUEST_TIMEOUT_LIMIT_SECONDS = 10; // Value in seconds

public BaseRequest(int method, String url, Class<T> resultClass, Response.Listener<T> listenerSuccess, Response.ErrorListener listenerError) {
    super(method, url, listenerError);
    this.resultClass = resultClass;
    this.listener = listenerSuccess;

    this.setRetryPolicy(new DefaultRetryPolicy(REQUEST_TIMEOUT_LIMIT_SECONDS * 1000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

}

@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
    try {
        String json = new String(
                response.data,
                HttpHeaderParser.parseCharset(response.headers));
        return Response.success(
                gson.fromJson(json, resultClass),
                HttpHeaderParser.parseCacheHeaders(response));
    } catch (UnsupportedEncodingException e) {
        return Response.error(new ParseError(e));
    } catch (JsonSyntaxException e) {
        return Response.error(new ParseError(e));
    }
}

@Override
protected void deliverResponse(T response) {
    listener.onResponse(response);
}
}

parseNetworkResponse方法將負責將您的Json轉換為Java Object類型。

現在,您可以為每個請求創建一個類,例如Login:

public class LoginRequest<T> extends BaseRequest<T> {

private final Gson gson = new Gson();
private final String email;
private final String password;

public LoginRequest(String email, String password, Class<T> clazz,
                    Response.Listener<T> listener, Response.ErrorListener errorListener) {

    super(Request.Method.POST, "url here...", clazz, listener, errorListener);

    this.email = email;
    this.password = password;
}


@Override
protected Map<String, String> getParams() throws AuthFailureError {
    Map<String, String> params = new HashMap<>();
    params.put("param1", email);
    params.put("param2", password);
    return params;
}
}

最后,為您的請求創建調用(在活動,片段中,無論您需要的位置):

LoginRequest request = new LoginRequest<>("aaaa@email.com", "myDummyPassword", LoginResponseModel.class, new Response.Listener<LoginResponseModel>() {
        @Override
        public void onResponse(LoginResponseModel loginResponseModel) {
            //Success
        }
    }, new BaseError(getApplicationContext()) {
        @Override
        public void onError(ErrorResponse response) {
            //Erros
        }
    });

這樣,您將收到從Gson解析的所需對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM