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)”