android - 在 Android 中以结构化模式使用 Volley 库

标签 android android-volley

我正在使用 Volley 在我的应用程序中进行网络调用...对于许多屏幕...(例如 fragment )我正在发出各种请求,例如 LoginRequest、FetchUsers 请求、FetchExams 请求...并处理响应和错误在每个 fragment 中。

我可以使用的最佳方法是什么...... 1. 对请求进行子类化 2. 创建接口(interface)/回调 3. 在我的 fragment 中获取结果/响应或错误响应...

这就是我正在做的......创建许多这样的方法......

 private void syncAllUsers() {
        progressDialog.setMessage("Loading Users...");

        StringRequest jsonProductCategoryFetchRequest = new StringRequest(Request.Method.POST, Config.SELECT_USERS,
                new Response.Listener<String>() {

                    @Override
                    public void onResponse(String response) {
                        try {
                            if(Constants.DEBUG_MODE_ON)
                                Log.d(Constants.DEBUG_LOG, "RESPONSE for Teachers: "+response);

                            JSONObject result = new JSONObject(response);
                            boolean code = result.getBoolean("error");

                            if (!code) {
                                //Get the Users Json Array
                                JSONArray ja = result.getJSONArray("users");
                                if(ja != null) {
                                    db.deleteAllUsers();
                                    for (int i = 0; i < ja.length(); i++) {
                                        JSONObject jobj = ja.getJSONObject(i);
                                        User user = new User();
                                        user.setId(jobj.getInt(User.KEY_ID));
                                        user.setName(jobj.getString(User.KEY_NAME));
                                        user.setEmail(jobj.getString(User.KEY_EMAIL));
                                        user.setPhone(jobj.getString(User.KEY_PHONE));
                                        user.setGender(jobj.getString(User.KEY_GENDER));
                                        user.setUsername(jobj.getString(User.KEY_USERNAME));
                                        user.setPassword(jobj.getString(User.KEY_PASSWORD));
                                        user.setOrganization_id(jobj.getString(User.KEY_ORGANIZATION_ID));
                                        user.setDob(jobj.getString(User.KEY_DOB));
                                        user.setStatus(jobj.getString(User.KEY_STATUS));
                                        user.setApi_key(jobj.getString(User.KEY_API_KEY));
                                        user.setDate_created(jobj.getString(User.KEY_DATE_CREATED));
                                        user.setRole_id(jobj.getInt(User.KEY_ROLE_ID));

                                        //Delete local Teachers before updating
                                        db.createUser(user);

                                    } // for loop ends
                                }
                            }

                            //syncAllExams();
                            progressDialog.dismiss();
                            getActivity().finish();
                            startActivity(new Intent(getActivity(), MainActivity.class));

                        } catch (Exception e) {
                            Log.d(Constants.DEBUG_LOG, "Exception Syncing Users: " , e);
                            Toast.makeText(getActivity(),"Something went wrong while fetching users", Toast.LENGTH_SHORT).show();
                            progressDialog.dismiss();
                            getActivity().finish();
                            startActivity(new Intent(getActivity(), MainActivity.class));
                        }
                    }
                } , new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                if(Constants.DEBUG_MODE_ON)
                    Log.d(Constants.DEBUG_LOG, "Error Response for Users : "+error.getCause()+""+error.toString());
                Toast.makeText(getActivity(), getString(R.string.no_internet), Toast.LENGTH_SHORT).show();
                progressDialog.dismiss();
                getActivity().finish();
                startActivity(new Intent(getActivity(), MainActivity.class));

            }
        }) {
            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<String, String>();

                params.put(User.KEY_ORGANIZATION_ID, preferencesManager.getOrganizationID());
                params.put(User.KEY_API_KEY, preferencesManager.getApiKey());
                Log.d("Registration", "PARAMS : " + params.entrySet());
                return params;
            }

            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                HashMap<String, String> params = new HashMap<String, String>();
               // params.put("Content-Type", "application/json; charset=utf-8");
                params.put("Content-Type", "application/x-www-form-urlencoded");

                String auth = preferencesManager.getApiKey();
                params.put("Authorization", auth);
                return params;
            }
        };


        MyApplication.getInstance().addToReqQueue(jsonProductCategoryFetchRequest);
    }

我认为会有一种干净的方法来执行此操作。任何建议。

最佳答案

我一直在使用这个类来创建请求,它使用 gson 自动将你的 json 转换为你的对象。在这里查找示例: https://gist.github.com/ficusk/5474673

关于android - 在 Android 中以结构化模式使用 Volley 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35427543/

相关文章:

Android - Volley 无法将我的参数发送到服务器

android - checkmarx 报告了 Volley 的 REFELCTED_XSS_ALL_CLIENT

java - Android锁定线程中的CountDownLatch

android - 如何在android中清空 Volley 请求队列

Android:动态创建的NetworkImageView的宽度和高度返回零

android - 如何以编程方式仅更改微调器的下拉列表宽度 - android

php - Android JSON 解析器将多份数据发送到服务器

android - 非法参数异常 : Failed to find configured root that contains filePath

android - java.lang.illegalStateException : Butterknife 错误

java - 更改 Google 标题在 map 上的位置