java - 如何在 Android 中上传可能是音频、文本或图像的数据?
问题描述
我正在尝试将android中的音频文件上传到服务器。问题是我不知道如何在 Android 中编写上传代码,或者我是否可以使用任何库或 API。
我是 Android 开发新手,没有服务器端经验。我对如何与服务器连接和通信、将数据发布到服务器、从服务器获取数据以及从服务器寻找什么响应知之甚少。
我试图找到一个教程或指南,它可以展示如何在 Android 中上传,并解释代码中正在做什么。任何有关如何学习与服务器通信的指南或建议都会非常有帮助。
解决方案
使用此代码使用 volley 进行网络请求以上传文本、多部分(音频、图像等):
String url = "http://yoururl.com";
VolleyMultipartRequest multipartRequest = new VolleyMultipartRequest(Request.Method.POST, url, new Response.Listener<NetworkResponse>() {
@Override
public void onResponse(NetworkResponse response) {
String resultResponse = new String(response.data);
try {
JSONObject result = new JSONObject(resultResponse);
String status = result.getString("status");
String message = result.getString("message");
if (status.equals(Constant.REQUEST_SUCCESS)) {
// tell everybody you have succed upload image and post strings
Log.i("Messsage", message);
} else {
Log.i("Unexpected", message);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
NetworkResponse networkResponse = error.networkResponse;
String errorMessage = "Unknown error";
if (networkResponse == null) {
if (error.getClass().equals(TimeoutError.class)) {
errorMessage = "Request timeout";
} else if (error.getClass().equals(NoConnectionError.class)) {
errorMessage = "Failed to connect server";
}
} else {
String result = new String(networkResponse.data);
try {
JSONObject response = new JSONObject(result);
String status = response.getString("status");
String message = response.getString("message");
Log.e("Error Status", status);
Log.e("Error Message", message);
if (networkResponse.statusCode == 404) {
errorMessage = "Resource not found";
} else if (networkResponse.statusCode == 401) {
errorMessage = message+" Please login again";
} else if (networkResponse.statusCode == 400) {
errorMessage = message+ " Check your inputs";
} else if (networkResponse.statusCode == 500) {
errorMessage = message+" Something is getting wrong";
}
} catch (JSONException e) {
e.printStackTrace();
}
}
Log.i("Error", errorMessage);
error.printStackTrace();
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<>();
params.put("api_token", "gh659gjhvdyudo973823tt9gvjf7i6ric75r76");
params.put("name", mNameInput.getText().toString());
params.put("location", mLocationInput.getText().toString());
params.put("about", mAvatarInput.getText().toString());
params.put("contact", mContactInput.getText().toString());
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);
有关更多代码,您可以访问此url
推荐阅读
- javascript - 如何访问此 JSON 层次结构中的子节点?
- excel - 确定是否按下了取消按钮,其中 InputBox 变量声明为 Double
- sparql - SPARQL 可选未绑定 VS 过滤器不存在
- php - 如何读取 Amazon SNS JSON 响应
- neo4j - Mac OS 上的 Neo4j Desktop 更改端口号
- node.js - node dist/server.js 退出且没有错误消息
- node.js - 在 ngModule 导入中找不到模块
- java - HTTP 状态 500 - servlet spring-dispatcher 的 Servlet.init() 抛出异常_(spring-dispatcher-servlet 很好)
- javascript - React - 如何重定向到搜索上的另一个组件?
- expect - 期望脚本捕获垃圾字符 - 需要删除