[英]How to send Raw text data using volley android
什么是有效的:下面使用volley的方法適用於發送JSON原始數據
我要執行的操作:嘗試發送原始文本數據,無法執行。 如何實現此目標....下面的快照顯示了我要發送的郵遞員數據
public <T> void MasterWordListCall(Class<T> theClass, Activity context, int position,
String mApi, int mGetOrPost, JSONObject stringObjectMap) {
//progress = CommonFunctions.showLoadingDialog(progress, ActDrawAreaTwo.this);
Map<String, String> params = new HashMap<>();
Map<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json");
Iterator it = params.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry) it.next();
Log.d(context.getClass().getCanonicalName(), "params - " + pairs.getKey() + ", " + pairs.getValue());
}
String url = AppConstants.SERVER_URL + mApi + "/";
Log.d("FinalUrl:->", url);
RequestQueue requestQueue = Volley.newRequestQueue(ActLogin.this);
CustomRequest jsObjRequest = new CustomRequest(Request.Method.POST,
url,
stringObjectMap,
params,
headers,
this.createRequestSuccessListener(),
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
progress.dismiss();
}
});
RequestQueueHelper.addToRequestQueue(jsObjRequest, "");
//requestQueue.add(jsObjRequest);
//new JSONObject(params)
}
private Response.Listener<JSONObject> createRequestSuccessListener() {
return new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
CommonFunctions.dismissLoadingDialog(progress);
if(response!=null){
Toast.makeText(ActLogin.this,"Success",Toast.LENGTH_LONG);
/*Intent mIntent = new Intent(ActLogin.this,ActSuccess.class);
mIntent.putExtra("data", mWord);
mIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(mIntent);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
finish();*/
}else if(response==null){
}
}
};
}
CustomRequest.java
public class CustomRequest extends JsonObjectRequest {
private Listener<JSONObject> listener;
private Map<String, String> params;
private Map<String, String> headers;
public CustomRequest(int put, String url,
JSONObject stringObjectMap, Map<String, String> params,
Map<String, String> headers,
Response.Listener<JSONObject> reponseListener,
ErrorListener errorListener) {
//super(put, url, errorListener);
super(put, url, (stringObjectMap == null) ? null : stringObjectMap.toString(), reponseListener,
errorListener);
this.listener = reponseListener;
this.params = params;
this.headers = headers;
}
/*public CustomRequest(int method,
String url,
Map<String, String> params,
Map<String, String> headers,
Listener<JSONObject> reponseListener,
ErrorListener errorListener) {
super(method, url, errorListener);
this.listener = reponseListener;
this.params = params;
this.headers = headers;
}*/
protected Map<String, String> getParams()
throws com.android.volley.AuthFailureError {
return params;
};
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
return headers != null ? headers : super.getHeaders();
}
@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data,
HttpHeaderParser.parseCharset(response.headers));
return Response.success(new JSONObject(jsonString),
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JSONException je) {
return Response.error(new ParseError(je));
}
}
@Override
protected void deliverResponse(JSONObject response) {
// TODO Auto-generated method stub
listener.onResponse(response);
}
}
您可以使用截擊字符串請求發送純文本數據
public void sendDataString(final VolleyCallback callback, final String appData) {
String uri = String.format(Locale.US, URL);
StringRequest stringRequest = new StringRequest(Request.Method.POST, uri,
new com.android.volley.Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, "String Success :" + response);
}
},
new com.android.volley.Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(TAG, "String Error In Request :" + error.toString());
}
}) {
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
String StringResponse = "";
try {
StringResponse = new String(response.data,
HttpHeaderParser.parseCharset(response.headers));
HttpHeaderParser.parseCharset(response.headers);
Log.d(TAG, "Response Headers " + response.headers);
Log.d(TAG, "String Status Code " + response.statusCode);
Log.d(TAG, "String response data : " + new String(response.data));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
}
callback.onSuccess(response.data.toString(), response.statusCode);
return super.parseNetworkResponse(response);
}
@Override
public byte[] getBody() throws AuthFailureError {
return appData.getBytes();
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/text");
headers.put("charset", TYPE_UTF8_CHARSET);
return headers;
}
};
stringRequest.setRetryPolicy(defaultRetryPolicy);
//if you are using OkHTTP with Stack.
ApplicationController.getInstance().addToRequestQueue(stringRequest, TAG);
}
其中appData
是需要發送到服務器的原始數據。 callBack
不是強制性的,但是如果在其他一些類中調用該方法並等待響應,則是必需的,因為volley是異步的。
在不推薦使用API 22 HTTP Client
后,在Volley中使用; 確保您有其他替代方法可以解決此問題。
嘗試這個。
String url = "";
RequestQueue queue = Volley.newRequestQueue(this);
StringRequest request = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// Is the responds is success
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// Is the responds is fail
}
}
){
@Override
protected Map<String, String> getParams() {
Map<String,String> map = new HashMap<>();
map.put("grant_type","SET_VALUE");
// Add all parameters here
return map;
}
};
queue.add(request);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.