2016-01-19 121 views
0

我想使用Volley發佈反饋數據。在Volley中轉換Http Post請求

我收到了他們使用的參考碼Http Request,但我無法將調用Http Post request

參考代碼:

FeedBack feedBack = new FeedBack(); 
     feedBack.message = edtMessage.getText().toString().trim(); 
     feedBack.name = edtName.getText().toString().trim(); 
     feedBack.stars = star; 
     if (dialog != null) dialog.show(); 
     HttpRequest http = new HttpRequest(getMainActivity(), Url, BaseRestClient.RequestMethod.POST, BaseModel.class, this); 
     http.addParam("data", new Gson().toJson(feedBack)); 
     http.executeAsync(); 
    } 
} 

@Override 
public void onSuccess(BaseModel baseModel) { 
    if (dialog != null && dialog.isShowing()) dialog.dismiss(); 
    if (baseModel != null) { 
     Log.i("output", "onSuccess> " + new Gson().toJson(baseModel)); 
    } 
} 

@Override 
public void onHttpError(ResponseStatus responseStatus) { 
    if (dialog != null && dialog.isShowing()) dialog.dismiss(); 
    if (responseStatus != null) 
     Log.i("output", "onHttpError> " + new Gson().toJson(responseStatus)); 
} 

我嘗試使用StringRequest但我不能夠響應如上添加BaseModel

StringRequest stringRequest = new StringRequest(Request.Method.POST, 
       Url, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         if (dialog != null && dialog.isShowing()) dialog.dismiss(); 

         Log.d("Response", response.toString()); 
         Toast.makeText(getActivity(), "" + response.toString(), Toast.LENGTH_SHORT).show(); 
        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         if (dialog != null && dialog.isShowing()) dialog.dismiss(); 
         Log.d("Error.Response", "" + error); 
        } 
       } 
     ) { 
      @Override 
      protected Map<String, String> getParams() { 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put("data", new Gson().toJson(feedBack)); 
       return params; 
      } 
     }; 

代替String類型響應我想BaseModel

請指教我該怎麼做?

謝謝。

回答

0

你可以參考下面的示例代碼:

在這裏,我的POJO類的FileInfo,例如:

public class FileInfo { 
    public String Type; 
    public long Size; 
    public String Modified; 
    public byte[] Data; 

    public FileInfo() { 

    } 
} 

然後,創建FileRequest.java如下所示:

public class FileRequest extends Request<FileInfo> { 
    private final String mRequestBody; 
    private final Response.Listener<FileInfo> mListener; 
    private final Response.ErrorListener mErrorListener; 

    private static final String PROTOCOL_CHARSET = "utf-8"; 
    private static final String PROTOCOL_CONTENT_TYPE = String.format("application/json; charset=%s", PROTOCOL_CHARSET); 

    public FileRequest(int method, String url, Response.Listener<FileInfo> listener, Response.ErrorListener errorListener) { 
     super(method, url, errorListener); 
     this.mRequestBody = null; 
     this.mListener = listener; 
     this.mErrorListener = errorListener; 
    } 

    public FileRequest(String url, String requestBody, Response.Listener<FileInfo> listener, Response.ErrorListener errorListener) { 
     super(requestBody == null ? Method.GET : Method.POST, url, errorListener); 
     this.mRequestBody = requestBody; 
     this.mListener = listener; 
     this.mErrorListener = errorListener; 
    } 

    public FileRequest(int method, String url, String requestBody, Response.Listener<FileInfo> listener, Response.ErrorListener errorListener) { 
     super(method, url, errorListener); 
     this.mRequestBody = requestBody; 
     this.mListener = listener; 
     this.mErrorListener = errorListener; 
    } 

    @Override 
    protected Response<FileInfo> parseNetworkResponse(NetworkResponse response) { 
     try { 
      FileInfo fileInfo = new FileInfo(); 
      fileInfo.Size = Long.valueOf(response.headers.get("Content-Length")); 
      fileInfo.Type = response.headers.get("Content-Type"); 
      fileInfo.Modified = response.headers.get("Last-Modified"); 
      fileInfo.Data = response.data; 
      return Response.success(fileInfo, HttpHeaderParser.parseCacheHeaders(response)); 
     } catch (Exception e) { 
      return Response.error(new ParseError(e)); 
     } 
    } 

    @Override 
    protected void deliverResponse(FileInfo response) { 
     mListener.onResponse(response); 
    } 

    @Override 
    protected VolleyError parseNetworkError(VolleyError volleyError) { 
     return super.parseNetworkError(volleyError); 
    } 

    @Override 
    public void deliverError(VolleyError error) { 
     mErrorListener.onErrorResponse(error); 
    } 

    @Override 
    public String getBodyContentType() { 
     return PROTOCOL_CONTENT_TYPE; 
    } 

    @Override 
    public byte[] getBody() throws AuthFailureError { 
     try { 
      return mRequestBody == null ? null : mRequestBody.getBytes(PROTOCOL_CHARSET); 
     } catch (UnsupportedEncodingException uee) { 
      VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", 
       mRequestBody, PROTOCOL_CHARSET); 
      return null; 
     } 
    } 
} 

然後,您可以撥打:

 FileRequest fileRequest = new FileRequest(method, url, requestBody, new Response.Listener<FileInfo>() { 
      @Override 
      public void onResponse(FileInfo response) { 
       // do something... 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       // do something... 
      } 
     });