Android使用Volley框架进行数据传输

前期配置

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”的解决方法
——————————————————————————
最后贴一下我的个人公众号:微信搜索“茶迁”或扫描下图。平时会更新一些编程相关的文章,欢迎大家关注~
茶迁

猜你喜欢

转载自blog.csdn.net/weixin_46269688/article/details/111308030