gpt4 book ai didi

android - 如何在 Android 中使用 Volley POST 方法传递字符串和文件数据?

转载 作者:行者123 更新时间:2023-11-29 02:40:30 25 4
gpt4 key购买 nike

我正在使用 Volley 发出服务器请求,但我知道 Volley 不会在 POST 请求中从 getParams() 方法传递参数,所以现在我通过将所有参数/值与 url 连接起来来传递这些数据,如下所示。

String url = "http://myweb/api/work?"+param1+"="+value;

现在的问题是它只适用于文本数据,我可以成功发出请求并且所有参数都传递到服务器但现在我必须上传一些图像文件也使用相同的 api。

如何使用 Volley POST 方法传递文件和字符串数据?

以下是我尝试过但没有成功的解决方案。 https://gist.github.com/anggadarkprince/a7c536da091f4b26bb4abf2f92926594#file-volleymultipartrequest-java

https://www.simplifiedcoding.net/android-volley-tutorial-to-upload-image-to-server/

编辑以下是我当前的请求代码:

StringRequest request = new StringRequest(Request.Method.POST, uri + param, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
dismissProgressDialog();
printResponse(response);

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

}
}) {

@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<>();
headers.put("key", key);
headers.put("tkey", tkey);
headers.put("Content-Type", "application/multipart");
return headers;
}
};

最佳答案

使用以下代码

VolleyMultipartRequest multipartRequest = new VolleyMultipartRequest(Request.Method.POST, url, new Response.Listener<NetworkResponse>() {
@Override
public void onResponse(NetworkResponse response) {
String resultResponse = new String(response.data);
// parse success output
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<>();
params.put("name", "Sam");
params.put("location", "India");
params.put("about", "UI/UX Designer");
params.put("contact", "xyz@email.com");
return params;
}

@Override
protected Map<String, DataPart> getByteData() {
Map<String, DataPart> params = new HashMap<>();
// file name could found file base or direct access from real path
// for now just get bitmap data from ImageView
params.put("avatar", new DataPart("file_avatar.jpg", AppHelper.getFileDataFromDrawable(getBaseContext(), mAvatarImage.getDrawable()), "image/jpeg"));
params.put("cover", new DataPart("file_cover.jpg", AppHelper.getFileDataFromDrawable(getBaseContext(), mCoverImage.getDrawable()), "image/jpeg"));

return params;
}
};

VolleySingleton.getInstance(getBaseContext()).addToRequestQueue(multipartRequest);

关于android - 如何在 Android 中使用 Volley POST 方法传递字符串和文件数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44512732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com