当前位置: 首页 > 知识库问答 >
问题:

截击-POST/GET参数

贺立果
2023-03-14

我看了关于截击的Google IO 2013课程,我正在考虑改用截击。Volley是否支持向请求添加POST/GET参数?如果是,我怎么做?

共有3个答案

米俊喆
2023-03-14

CustomRequest是一种解决Volley的JSONObjectRequest不能发布像StringRequest这样的参数的方法

以下是允许添加参数的帮助器类:

    import java.io.UnsupportedEncodingException;
    import java.util.Map;    
    import org.json.JSONException;
    import org.json.JSONObject;    
    import com.android.volley.NetworkResponse;
    import com.android.volley.ParseError;
    import com.android.volley.Request;
    import com.android.volley.Response;
    import com.android.volley.Response.ErrorListener;
    import com.android.volley.Response.Listener;
    import com.android.volley.toolbox.HttpHeaderParser;

    public class CustomRequest extends Request<JSONObject> {

    private Listener<JSONObject> listener;
    private Map<String, String> params;

    public CustomRequest(String url, Map<String, String> params,
            Listener<JSONObject> reponseListener, ErrorListener errorListener) {
        super(Method.GET, url, errorListener);
        this.listener = reponseListener;
        this.params = params;
    }

    public CustomRequest(int method, String url, Map<String, String> params,
            Listener<JSONObject> reponseListener, ErrorListener errorListener) {
        super(method, url, errorListener);
        this.listener = reponseListener;
        this.params = params;
    }

    protected Map<String, String> getParams()
            throws com.android.volley.AuthFailureError {
        return params;
    };

    @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);
    }

}

多亏了Greenchiu

查宜民
2023-03-14

在您的请求类(扩展请求)中,重写getParams()方法。您也可以对标头执行相同的操作,只需覆盖getHeaders()。

如果您在Volley测试中查看TestRequest.java中的PostAnd Body类,您会发现一个示例。它是这样的

public class LoginRequest extends Request<String> {

    // ... other methods go here

    private Map<String, String> mParams;

    public LoginRequest(String param1, String param2, Listener<String> listener, ErrorListener errorListener) {
        super(Method.POST, "http://test.url", errorListener);
        mListener = listener;
        mParams = new HashMap<String, String>();
        mParams.put("paramOne", param1);
        mParams.put("paramTwo", param2);

    }

    @Override
    public Map<String, String> getParams() {
        return mParams;
    }
}

埃文·查尔顿(Evan Charlton)非常友好,他制作了一个快速的示例项目,向我们展示如何使用截击。https://github.com/evancharlton/folly/

宗政松
2023-03-14

对于GET参数,有两种选择:

第一:正如问题下方的注释所建议的,您可以使用字符串并用其值替换参数占位符,如:

String uri = String.format("http://somesite.com/some_endpoint.php?param1=%1$s&param2=%2$s",
                           num1,
                           num2);

StringRequest myReq = new StringRequest(Method.GET,
                                        uri,
                                        createMyReqSuccessListener(),
                                        createMyReqErrorListener());
queue.add(myReq);

其中num1和num2是包含值的字符串变量。

第二:如果您使用较新的外部HttpClient(例如4.2. x),您可以使用URIBuilder来构建您的Uri。优点是,如果uri字符串中已经包含参数,则更容易将其传递给URIBuilder,然后使用ub.set查询(URLEncodedUtils.format(getGetParams(),UTF-8));添加附加参数。这样你就不用费心去检查“?”已经添加到uri或错过一些

对于POST参数可能有时会比接受的答案更容易做到这一点:

StringRequest myReq = new StringRequest(Method.POST,
                                        "http://somesite.com/some_endpoint.php",
                                        createMyReqSuccessListener(),
                                        createMyReqErrorListener()) {

    protected Map<String, String> getParams() throws com.android.volley.AuthFailureError {
        Map<String, String> params = new HashMap<String, String>();
        params.put("param1", num1);
        params.put("param2", num2);
        return params;
    };
};
queue.add(myReq);

例如,只是重写getParams()方法。

您可以在Andorid Volley示例项目中找到一个工作示例(以及许多其他基本的Volley示例)。

 类似资料:
  • 我目前正试图通过Google Volley发送一个简单的POST请求到我的服务器。因此,我写了以下几行代码: 但是我得到一个返回的错误500,它表示缺少一个参数(regId)。我尝试了相同的GET请求,但得到了相同的结果。 只有当我使用带有格式化URL的StringRequest时,如address_of_my_server/方法?"服务器以200回复。 当我使用StringRequest时,我得

  • 问题内容: 我需要用JSP做一些小任务;对JSP而言,我是一个非常新的人,我想知道是否有可能从HTTP请求中仅 获取GET 或 POST 参数。 我已经看到了ServletRequest.getParameter(等等),但是这些方法似乎同时具有GET 和 POST参数。是否有一种方法可以只获取其中一个,而无需自己解析URL或请求正文?如果不是,是否存在优先值规则覆盖哪些值(例如POST参数始终覆

  • 我使用截击来实现简单的REST请求,并在其中传递一些post参数。但它总是给出响应。 我已尝试按照自定义要求进行操作。 我确实尝试重写并在其中传递参数。但它并没有传递参数并抛出错误400。我在这里和这里尝试了许多建议,但都不管用。截击中有虫子吗? 请导游。

  • 把当转换到kotlin我发现一些问题与发送参数与请求我尝试使用自定义请求类扩展从请求这是不是修复我的问题也使用JsonObjectRequest与哈希映射一些错误的参数不发送与请求.也使用JsonObjectRequest与JSONObject也同样的错误是仍然后,我使用Post Man API的一面从API是罚款没有任何问题也当使用StringRequest没有任何问题 我使用JsonObjec

  • 我正在用GoogleVolley Api创建一个android应用程序,它处理我的应用程序和php脚本之间的连接。出于某种原因,该应用程序没有向我的服务器发送任何数据,也许这里的某个人可以找到它? 我的方法被正确调用,但是当我尝试打印它时,它返回null!一切实际上都在工作,除了数据没有正确传递,我相信,因为我的php脚本抱怨变量为空

  • 问题内容: BaseHTTPServer模块中的BaseHTTPHandler似乎没有提供任何方便的方法来访问http请求参数。从路径解析GET参数和从请求正文解析POST参数的最佳方法是什么? 现在,我正在将它用于GET: 这适用于大多数情况,但是我想要更强大的功能,可以正确处理编码和类似空参数的情况。理想情况下,我想要的是小型独立的产品,而不是完整的Web框架。 问题答案: 您可以尝试使用We