前期配置
1.在“build.gradle”文件中导入包:
//导入Volley相关
implementation 'com.mcxiaoke.volley:library:1.0.19'
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
2.在“AndroidManifest”中添加访问网络权限:
<uses-permission android:name="android.permission.INTERNET" />
主要代码
/**
* 函数功能:上传一条数据到服务器
*/
public void UploadImage(Context mContext, final String Image) {
Log.d("Record", "Uploading image...");
//请求地址
String url = "http://0.0.0.0:8080/ImageUpload/ImageServlet";
String tag = "UploadImage";
//取得请求队列
RequestQueue requestQueue = Volley.newRequestQueue(mContext);
//防止重复请求,所以先取消tag标识的请求队列
requestQueue.cancelAll(tag);
//创建StringRequest,定义字符串请求的请求方式为POST(省略第一个参数会默认为GET方式)
final StringRequest request = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject = (JSONObject) new JSONObject(response).get("params");
String insertresult = jsonObject.getString("InsertResult");
if (insertresult.equals("success")) {
Log.d("Record", "Upload Success");
mTvChange.setText("上传成功");
//插入成功
} else {
Log.d("Record", "UpLoad Failed");
//插入失败
}
} catch (JSONException e) {
//请求异常
Log.d("Record", "UpLoad error:" + e);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//响应错误
Log.e("Record", "插入错误:"+error.getMessage(), error);
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("Image", Image);
return params;
}
};
//设置Tag标签
request.setTag(tag);
//将请求添加到队列中
requestQueue.add(request);
}
注:
1.“0.0.0.0:8080”是服务器的域名,大家换成自己的域名即可;
2.“/ImageUpload/ImageServlet”是大家服务器端Web应用的名字,大家根据个人的命名修改即可;
3.注意Volley是异步执行的,因此最好不要采取设置返回值来进行下一步操作的方式,这样容易出现空指针报错等方式。
4.在较高的Android版本中可能存在传输报错的现象,原因是Http不支持明文传输,具体解决方法在这篇文章中:
Android使用Volley框架显示“Cleartext HTTP traffic to XXX not permitted”的解决方法
——————————————————————————
最后贴一下我的个人公众号:微信搜索“茶迁”或扫描下图。平时会更新一些编程相关的文章,欢迎大家关注~