【问题标题】:Upload files with Volley custom body post request使用 Volley 自定义正文发布请求上传文件
【发布时间】:2019-02-04 08:39:22
【问题描述】:

我需要使用 Android 中的 volley 库将 2 个文件发送到服务器。 有一个例子说明它如何在 Postman 中运行良好: 我需要在 android 中重现这个完全 POST 调用。 请暂时看一下我的代码(不起作用):

JsonObjectRequest sr = new JsonObjectRequest(Request.Method.POST, URL, new JSONObject(params), new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {

            Log.i("Response", response.toString());

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

            Log.e("VOLLEY", error.toString());
        }
    }){
        @Override
        protected Map<String,String> getParams(){
            Map<String,String> params = new HashMap<>();
            params.put("Urine", "test");

            return params;
        }

        @Override
        public Map<String, String> getHeaders() {
            Map<String,String> params = new HashMap<>();
            params.put("Authorization", "token");
            return params;
        }

        @Override
        public String getBodyContentType() {
            return "application/x-www-form-urlencoded; charset=utf-8";
        }

        @Override
        public byte[] getBody() {
            int size = (int) file.length();
            byte[] bytes = new byte[size];
            try {
                BufferedInputStream buf = new BufferedInputStream(new FileInputStream(file));
                buf.read(bytes, 0, bytes.length);
                buf.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return bytes;
        }

        @Override
        protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
            byte[] data = response.data;
            String message = new String(data);
            Log.i("parseNetworkResponse", String.valueOf(message));

            return super.parseNetworkResponse(response);
        }
    };

如何使用 Volley 库来实现这一点?谢谢。

【问题讨论】:

    标签: android http-post android-volley


    【解决方案1】:

    在我看来,Retrofit 2 是一个更好、更容易用于文件上传的库。

    这是一个很好且容易解决的问题。它应该可以帮助你。

    Retrofit 2 - Multifile Uploading

    【讨论】:

    • 最后我像你的建议一样使用了一个改造库,而我无法使用 volley 重现我的调用。谢谢!
    • 太好了,很高兴你来对了。只是一种享受。 :)
    猜你喜欢
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多