使用 Volley 在 POST 请求中发送参数

Sending Parameters in a POST request using Volley

正在尝试将 Mangnet Link 添加到使用其 API https://app.swaggerhub.com/apis-docs/premiumize.me/api/1.4#/transfer/transferCreate 的 Premiumize 帐户。

回复信息: {"status":"error","message":"src is missing"}

代码如下:-

void pushMagnet(final String apiKey, final String magnetLink, final Context context) {
    final String url = "https://premiumize.me/api/transfer/create?apikey=" + apiKey;

    Map<String, String> magnetSrc = new HashMap<>();
    //Parameters i want to send
    magnetSrc.put("src", magnetLink);

    RequestQueue queue = Volley.newRequestQueue(context);

    JsonObjectRequest stringRequest = new JsonObjectRequest(Request.Method.POST, url,
            //here added as an JSON Object
            new JSONObject(magnetSrc),
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    Log.e("Rest Response:", response.toString());
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("Rest Error:", error.toString());
        }
    }
    ) {
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> headers = new HashMap<>();
            headers.put("accept", "application/json");
            headers.put("Content-Type", "multipart/form-data");

            return headers;
        }
    };
    queue.add(stringRequest);
}

我也已经在这里尝试过了:

最有可能的错误是在 header 参数 "Content-Type"

您使用了不正确的 header 信息 "multipaltform/form-data"

尝试将 "Content-Type""multipart/form-data" 添加到 header 数据。

MULTIPARTDATA的提交与提交正常形式不同。您必须使用 MultiPartEntity 而不是 Map。

对于多部分数据,请尝试遵循此 link:How to send a “multipart/form-data” POST in Android with Volley

希望这能解决您的问题。

解决方法:

使用这个库和这个代码:

https://github.com/amitshekhariitbhu/Fast-Android-Networking

void pushMagnet(final String apiKey, final String magnetLink, final Context context) {
    final String url = "https://premiumize.me/api/transfer/create?apikey=" + apiKey;
    JSONObject srcMagnet = new JSONObject();
    try {
        srcMagnet.put("src", magnetLink);
    } catch (JSONException e) {
        e.printStackTrace();
    }

    OkHttpClient client = new OkHttpClient().newBuilder()
            .addInterceptor(new GzipRequestInterceptor()).build();
    AndroidNetworking.initialize(context, client);

    AndroidNetworking.post(url)
            .addHeaders("accept", "application/json")
            .addHeaders("Content-Type", "multipart/form-data")
            .addQueryParameter("src", magnetLink)
            .build().getAsJSONObject(new JSONObjectRequestListener() {
        @Override
        public void onResponse(JSONObject response) {
            Log.e("Server response:", response.toString());
        }

        @Override
        public void onError(ANError anError) {
            Log.e("Server error:", anError.toString());
        }
    });

}

要在 volley 中发送参数,您需要覆盖 getParams()

@Override
protected Map<String,String> getParams()
{

    Map<String,String> params = new HashMap<>();
    // the POST parameters:
    params.put("src", magnetLink);
    Log.d("Volley","Volley params "+params);
    return params;

}