Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓截击库:如何向服务器发送图像?_Android_Jpeg_Android Volley_Android Networking - Fatal编程技术网

Android 安卓截击库:如何向服务器发送图像?

Android 安卓截击库:如何向服务器发送图像?,android,jpeg,android-volley,android-networking,Android,Jpeg,Android Volley,Android Networking,嗨,伙计们 我有一个jpg图像存储在我的设备上,我想将它发送到服务器(mywebsite.com/api.php)。我想使用volley库,因为它是由谷歌的官方安卓开发者制作的,我想他们会尽快将其添加到sdk中 现在,我正在使用以下代码向服务器发送字符串: postRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {

嗨,伙计们

我有一个
jpg图像存储在我的设备上
,我想
将它发送到服务器
(mywebsite.com/api.php)。我想使用
volley库
,因为它是由谷歌的官方安卓开发者制作的,我想他们会尽快将其添加到sdk中

现在,我正在使用以下代码向服务器发送字符串:

 postRequest = new StringRequest(Request.Method.POST, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                        // code here for response
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    // code here for error response
                }
            }
    ) {
        @Override
        protected Map<String, String> getParams() {
            Map<String, String> params = new HashMap<>();
            // the POST parameters:
            params.put("key", "myApiKey");
            params.put("data","stringOfMyData");
            return params;
        }
    };
postRequest=新的StringRequest(Request.Method.POST,url,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
试一试{
//请在此处输入代码以获取响应
}捕获(JSONException e){
e、 printStackTrace();
}
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
//此处代码用于错误响应
}
}
) {
@凌驾
受保护的映射getParams(){
Map params=新的HashMap();
//POST参数:
参数put(“key”、“myApiKey”);
参数put(“数据”、“字符串数据”);
返回参数;
}
};
如何使用截击库将jpg发送到服务器?每次发送内容时,我都需要将其与API密钥一起发送,以便将信息接收到服务器,因此我不能将
Map
更改为
Map
,因为我的API密钥是一个字符串

我读到有一种解决方案,可以将我的图像更改为
字节[]数组
,然后将其转换为
base64字符串
格式,但如果可能,我希望避免这种情况

是否有其他解决方案可以发送图像而不将其转换为
base64字符串


欢迎任何参考或建议!提前谢谢

文件通过
POST
请求中的
multipart
支持发送。它与这里的HTML表单相同

默认情况下,
Volley
没有多部分支持,但它非常灵活,因此您可以扩展它的
Request
类来实现自己版本的
multipart

您可以从这个要点中找到
MultipartRequest
类的一个实现,并在您的程序中使用

您可以这样使用此类:

    HashMap<String, String> params = new HashMap<String, String>();

    String url = "YOUR POST URL";
    String image_path = "your local image path";

    params.put("your_extra_params", "value");

    MultipartRequest multipartRequest =

            new MultipartRequest(url, params, image_path, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Log.e(TAG, "Success Response: " + response.toString());

                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {

                    if (error.networkResponse != null) {
                        Log.e(TAG, "Error Response code: " +
                                error.networkResponse.statusCode);


                        try {



                    }


                    if (error instanceof NetworkError) {
                    } else if (error instanceof ServerError) {
                    } else if (error instanceof AuthFailureError) {
                    } else if (error instanceof ParseError) {
                    } else if (error instanceof NoConnectionError) {
                    } else if (error instanceof TimeoutError) {
                    }
                }
            });

    requestQueue.add(multipartRequest);
HashMap params=newhashmap();
String url=“你的帖子url”;
字符串image\u path=“您的本地映像路径”;
参数put(“您的额外参数”、“值”);
多方请求多方请求=
新的MultipartRequest(url、参数、图像路径、新响应.Listener(){
@凌驾
公共void onResponse(字符串响应){
Log.e(标记“成功响应:+Response.toString());
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
if(error.networkResponse!=null){
Log.e(标记“错误响应代码:”+
错误。网络响应。状态代码);
试一试{
}
if(网络错误实例错误){
}else if(服务器错误实例){
}else if(AuthFailureError的错误实例){
}else if(error instanceof ParseError){
}else if(错误实例NoConnectionError){
}else if(TimeoutError的错误实例){
}
}
});
添加(multipartRequest);

github示例中的构造函数,以及参数
newmultipartrequest,我没有完全理解(url,params,image_path,…
与MultipartRequest构造函数参数不匹配。因此,我得到以下错误和可能的解决方案:无法解析构造函数…更改MultipartRequest的签名我认为正确的参数顺序是:
MultipartRequest=new MultipartRequest(url,imagePath,params,…)
因为构造函数参数顺序是
公共MultipartRequest(字符串url、字符串文件路径、字符串routeId等)
但是我不知道routeId是什么以及如何添加HashMap(
HashMap
String
不同),您可以查看。两个选项:带或不带HttpEntity:-)什么是MRouteId?我得到一个错误:“java.lang.NoClassDefFoundError:org.apache.http.entity.ContentType位于org.apache.http.entity.mime.content.FileBody.(FileBody.java:89)”