所以我使用JsonObjectRequest
向JsonObject
发送一个JsonArray
来进行休息通话,但它返回JsonObject
而不是JsonObjectRequest
。它给我一个错误,说它无法解析JsonArrayRequest
的结果,但是如果我使用JsonObject
我就不能在身体中发送JsonObject
。如何发送JsonArray
但获得 RequestQueue queue = Volley.newRequestQueue(this);
JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST,url,jsonBody,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
String test = "";
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
作为回复?
public ActionResult AnnounceRead()
{
using (var db = new HarmonyMainServerDbContext())
{
var announceList = from r in db.Announcer
select new { r.AnnounceTitle, r.AnnounceLink, };
return View("Index", announceList);
}
}
答案 0 :(得分:6)
i。您附上邮寄申请的数据很好。如果你想发送一个json对象或json数组,其中任何一个都可以。你唯一要理解的是。
当您向服务器发送数据时,它会给您一个响应,在您的情况下它是JsonArray。 即您的发送数据(数组或对象)与您正在创建的请求无关。您可以通过调用简单地附加数据。
你必须创建一个JsonArrayrequest来处理服务器响应。
string value = jsonbody.toString();
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.POST,url,value,
new Response.Listener<JsonArray>() {
@Override
public void onResponse(JsonArray response) {
String test = "";
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
如果您不确定从服务器(Json对象或数组)获得哪个响应,可以使用StringRequest,它将从服务器处理响应为字符串。这也将适用于您的情况。
答案 1 :(得分:6)
我最近遇到了这种情况,并意识到Volley没有为此提供任何开箱即用的解决方案。您已创建一个自定义响应,该响应接收json对象请求并返回一个数组。一旦你创建了自己的课程,你就可以做这样的事情。
CustomJsonRequest jsonObjectRequest = new CustomJsonRequest(Request.Method.POST, url, credentials, new Response.Listener<JSONArray>(){...}
package com.example.macintosh.klickcard.Helpers.Network;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import com.android.volley.toolbox.JsonRequest;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
/**
* Created by yasinyaqoobi on 10/6/16.
*/
public class CustomJsonRequest<T> extends JsonRequest<JSONArray> {
private JSONObject mRequestObject;
private Response.Listener<JSONArray> mResponseListener;
public CustomJsonRequest(int method, String url, JSONObject requestObject, Response.Listener<JSONArray> responseListener, Response.ErrorListener errorListener) {
super(method, url, (requestObject == null) ? null : requestObject.toString(), responseListener, errorListener);
mRequestObject = requestObject;
mResponseListener = responseListener;
}
@Override
protected void deliverResponse(JSONArray response) {
mResponseListener.onResponse(response);
}
@Override
protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) {
try {
String json = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
try {
return Response.success(new JSONArray(json),
HttpHeaderParser.parseCacheHeaders(response));
} catch (JSONException e) {
return Response.error(new ParseError(e));
}
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
}
}
}
答案 2 :(得分:0)
我的正好相反,一个 JsonArrayRequest 返回一个 JSONObject 响应。
因此,我在 Kotlin 中的自定义请求如下:
open class CustomJsonRequest(
method: Int,
url: String?,
params: JSONArray,
responseListener: Response.Listener<JSONObject>,
listener: Response.ErrorListener?,
) :
JsonRequest<JSONObject>(method, url, params.toString(), responseListener, listener) {
override fun deliverResponse(response: JSONObject?) {
super.deliverResponse(response)
}
override fun parseNetworkResponse(response: NetworkResponse): Response<JSONObject?>? {
return try {
val jsonString = String(response.data, Charset.forName(HttpHeaderParser.parseCharset(response.headers)))
Response.success(JSONObject(jsonString), HttpHeaderParser.parseCacheHeaders(response))
} catch (e: UnsupportedEncodingException) {
Response.error(ParseError(e))
} catch (je: JSONException) {
Response.error(ParseError(je))
}
}
}
然后使用如下:
val request: CustomJsonRequest =
object : CustomJsonRequest(
Method.POST, url, you_JSONArray_request_body,
Response.Listener { response ->
// handle the JSONObject response
},
Response.ErrorListener { error ->
// handle the error response
}) {
// your request headers
override fun getHeaders(): Map<kotlin.String, kotlin.String>? {
return your_headers
}
// other overrides ...
}
// enqueue the request
Volley.newRequestQueue(applicationContext).add(request)
? :)