Android:将 HTTP 库从 Volley 更改为 OkHttp

Android: Changing HTTP library from Volley to OkHttp

我正在将应用程序中的 HTTP 库从 Volley 更改为 OkHttp,因为 Volley 在 API 级别 23 中无效(因为 Volley APIs 包含已弃用的库)。我现在尝试修改的原始代码是如下注册新用户,目前正在使用 Volley APIs.

private void registerUser(final User newUser) {
        // Tag used to cancel the request
        String tag_string_req = "req_register";

        pDialog.setMessage("Registering");
        showDialog();

        StringRequest strReq = new StringRequest(Request.Method.POST, AppConfig.URL_REGISTER, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.d(TAG, "Register response: " + response);
                hideDialog();
                try {
                    JSONObject jObj = new JSONObject(response);
                    boolean error = jObj.getBoolean("error");
                    if(!error) {
                        // User successfully stored in MySQL
                        // Now store the user in sqlite
                        String userUid = jObj.getString("uid");
                        JSONObject user = jObj.getJSONObject("user");
                        String userEmail = user.getString("email");
                        String userName = user.getString("name");
                        String userGender = user.getString("gender");
                        String userBirthday = user.getString("birthday");
                        String userCreated_at = user.getString("created_at");

                        // Inserting row in users table
                        db.addUser(userEmail, userName, userGender, userBirthday, userUid, userCreated_at);

                        // Launch mainscreen activity
                        Intent intent = new Intent(RegisterActivity.this, MainScreenActivity.class);
                        startActivity(intent);
                        finish();
                    } else {
                        // Error occurred in registration. Get the error message.
                        String errorMsg = jObj.getString("error_msg");
                        Toast.makeText(getApplicationContext(), errorMsg, Toast.LENGTH_LONG).show();
                    }
                } catch(JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG, "Registration Error: " + error.getMessage());
                Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
                hideDialog();
            }
        }) {
            @Override
            protected Map<String, String> getParams() {
                // Posting params to register url
                Map<String, String> params = new HashMap<String, String>();
                params.put("tag", "register");
                params.put("email", newUser.getEmail());
                params.put("name", newUser.getName());
                params.put("gender", newUser.getGender());
                params.put("password", newUser.getPassword());
                params.put("birthday", newUser.getBirthday());
                return params;
            }
        };
        // Adding request to to request queue
        AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
    }

这是属于 AppController class 的 addToRequestQueue,它在 Androidmanifest.xml 文件的标记中表示。

public <T> void addToRequestQueue(StringRequest req, String tag) {
    req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
    getRequestQueue().add(req);
}

我是 OkHttp 的新手,我已经花了很长时间来解决这个问题。任何好的提示将不胜感激。

OkHttp 的工作方式几乎相同,因此您可以轻松更改库。 您应该首先创建 Http 客户端:

OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
client.newCall(request).enqueue(new Callback() {
      @Override
        public void onFailure(Request request, IOException e) {
            // if something goes wrong
        }

        @Override
        public void onResponse(Response response) throws IOException {
           // Here you get the response and parse it
           String response = response.body().string();
        }
}

希望对您有所帮助。