如何使用okhttp3制作登录页面

how to make a login page with okhttp3

在 Android Studio 中,我在我的项目中设置了一个使用 OkHttp 的登录页面,但我在 OkHttp 连接中遇到了一个小问题。我不知道如何创建 POST 正文。 下面是我的代码:

    btn_login.setOnClickListener(new View.OnClickListener() {
                                     @Override
                                     public void onClick(View v) {

                                         if (isNetworkAvailable()) {
                                             userLogin();
                                             final String email = inemail.getText().toString().trim();
                                             final String password = inpass.getText().toString().trim();
                                             okHttpClient = new OkHttpClient();
                                             MediaType mediaType = MediaType.parse("application/json");
                                             RequestBody body = RequestBody.create(mediaType, "{\"action\":\"patientappointmentlist\",\"tokenid\":\"j9394je902jew92jeY9j\",\"user\":"+email+",\"pass\":"+password+"}");
                                             //"{"jsonExample":"value"}"
                                             request = new Request.Builder()
                                                     .url("https://secure.advcare.info")
                                                     .post(body)
                                                     .addHeader("Content-Type", "application/json")
                                                     .build();
                                             okHttpClient.newCall(request).enqueue(new Callback() {
                                                 @Override
                                                 public void onFailure(Call call, IOException e) {
                                                     e.printStackTrace();
                                                 }

                                                 @Override
                                                 public void onResponse(Call call, Response response) throws IOException {
                                                     try {

                                                         final String responseData = response.body().string();
                                                         JSONObject json = new JSONObject(responseData);
                                                         final String owner = json.getString("status");

                                                         MainActivity.this.runOnUiThread(new Runnable() {
                                                             @Override
                                                             public void run() {
                                                                 show.setText(owner+email+password);
                                                             }
                                                         });

                                                     } catch (JSONException e) {
                                                         e.printStackTrace();
                                                     }
                                                 }
                                             });
                                             Log.d(TAG, "Main thread is running");
                                         } else {
                                             Toast.makeText(getApplicationContext(), "Networket Problem ! ", Toast.LENGTH_SHORT).show();
                                         }
                                     }

                                     private boolean isNetworkAvailable() {

                                         ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
                                         NetworkInfo networkInfo = manager.getActiveNetworkInfo();

                                         boolean isAvailable = false;
                                         if (networkInfo != null && networkInfo.isConnected()) {
                                             isAvailable = true;
                                         }
                                         return isAvailable;
                                     }

                                     private void userLogin() {

                                         String email = inemail.getText().toString().trim();
                                         String password = inpass.getText().toString().trim();


                                         if (email.isEmpty()) {
                                             inemail.setError("Email is required");
                                             inemail.requestFocus();
                                             return;
                                         }
                                       }

                                         if (password.isEmpty()) {
                                             inpass.setError("Password required");
                                             inpass.requestFocus();
                                             return;
                                         }
                                     }
                                 });
}

当我将 RequestBody 更改为:

RequestBody body = RequestBody.create(mediaType, "{\"action\":\"patientappointmentlist\",\"tokenid\":\"j9394je902jew92jeY9j\",\"user\":"apptester",\"pass\":"123456"}");

它工作正常。 虽然我在应用程序中正确输入了电子邮件和密码。 请帮我。

这是使用 POST 方法的 OKHttp 连接示例。

此示例代码 login_username.getText().toString()) 将获取您在用户名 edittext 中输入的文本。

当用户输入用户名和密码正确时,将重定向到HomeActivity.class

代码:

private void submitForm() throws IOException {
    try
    {
        urlAPI = new URL("http://testsiteprog.com./accounts/signin.php");
    }
    catch (MalformedURLException e)
    {
        e.printStackTrace();
    }

    OkHttpClient client = new OkHttpClient();

    //INPUT *GETTEXT
    JSONObject jsonObject = new JSONObject();
    try {
        jsonObject.put("username", login_username.getText().toString());
        jsonObject.put("password", login_password.getText().toString());
        jsonObject.put("ipaddress", get_publicIPaddress);
    }
    catch (JSONException e) {
        e.printStackTrace();
    }

    MediaType JSON =MediaType.parse("application/json; charset=utf-8");

    RequestBody requestBody =  RequestBody.create(JSON, jsonObject.toString());
    Log.i("LOG_INTENT", login_username.getText().toString() + login_password.getText().toString() + get_publicIPaddress);

    Request request = new Request.Builder()
        .url(urlAPI)
        .post(requestBody)
        .build();


    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            String mMessage = e.getMessage();
            Log.w("failure Response", mMessage);
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            String mMessage = response.body().string();

            try {
                JSONObject object = new JSONObject(mMessage);
                responseCode = object.getString("code");
                responseMsg = object.getString("message");
                responseToken = object.getString("token");

                if(response.code() == 200) {
                    Intent intentHome = new Intent(LoginActivity.this, HomeActivity.class);
                    intentHome.putExtra("TOKEN", responseToken);
                    Log.i("TAG", "Login Activity" + responseToken);
                    startActivity(intentHome);

                    Log.i("INTENT", "NAKUKUHA BA AT NATAPOS?");
                }
                else if(response.code() == 400){
                    runOnUiThread(new Runnable() {
                        public void run() {
                            Toast.makeText(LoginActivity.this, responseMsg, Toast.LENGTH_SHORT).show();
                        }
                    });
                }
            }
            catch (JSONException e) {
                e.printStackTrace();
            }
            Log.i("RESPONSE",  response + mMessage + "code" + responseCode + responseToken );
        }
    });

    Log.i("GET", "NAKUKUHA BA AT NATAPOS?");
}

希望对解决您的问题有所帮助。