возникли проблемы с моей регистрацией с помощью модернизации - PullRequest
0 голосов
/ 22 января 2019

Я делаю приложение, в котором пользователь регистрируется, используя rest api. api работает успешно, но у меня возникла проблема, когда пользователь вводит тот же адрес электронной почты во второй раз для регистрации пользователя сбой приложения. Я не понимаю, как сделать проверку, которая говорит, что электронная почта уже существует. Вот мой код, где я регистрирую пользователя.

private void userSignup(){

    String user_type = String.valueOf(radiogroup.getCheckedRadioButtonId());
    String directory_type = spinner.getSelectedItem().toString();
    String username = edit_username.getText().toString().trim();
    final String email = edit_email.getText().toString().trim();
    String first_name = edit_firstname.getText().toString().trim();
    String last_name = edit_lastname.getText().toString().trim();
    String phone = edit_Phone.getText().toString().trim();
    String password = edit_password.getText().toString().trim();
    String confirm_password = edit_retypePassword.getText().toString().trim();



    if (username.isEmpty()){
        edit_username.setError("User Name is Required");
        edit_username.requestFocus();
        return;
    }
    if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()){
        edit_email.setError("Enter a valid Email");
        edit_email.requestFocus();
        return;
    }
    if (first_name.isEmpty()){
        edit_firstname.setError("First Name is Required");
        edit_firstname.requestFocus();
        return;
    }
    if (last_name.isEmpty()){
        edit_lastname.setError("Last Name is Required");
        edit_lastname.requestFocus();
        return;
    }
    if (!Patterns.PHONE.matcher(phone).matches()){
        edit_Phone.setError("Enter a valid Phone NO.");
        edit_Phone.requestFocus();
        return;
    }
    if (password.isEmpty()){
        edit_password.setError("Password required");
        edit_password.requestFocus();
        return;
    }
    if (password.length() < 6){
        edit_password.setError("Password should be atleast 6 characters");
        edit_password.requestFocus();
        return;
    }
    if (!confirm_password.equals(password)){
        edit_retypePassword.setError("Error in Password matching please check");
        edit_retypePassword.requestFocus();
        return;
    }
    if (confirm_password.isEmpty()){
        edit_retypePassword.setError("Retype password is required");
        edit_retypePassword.requestFocus();
        return;
    }
    if(!TextUtils.isEmpty(user_type) || !TextUtils.isEmpty(directory_type) ||
            !TextUtils.isEmpty(username) || !TextUtils.isEmpty(email) ||
            !TextUtils.isEmpty(first_name) || !TextUtils.isEmpty(last_name) ||
            !TextUtils.isEmpty(phone) || !TextUtils.isEmpty(password) ||
            !TextUtils.isEmpty(confirm_password)){

        mRegProgress.setTitle("Registering User");
        mRegProgress.setMessage("Please wait while we create your account !");
        mRegProgress.setCanceledOnTouchOutside(false);
        mRegProgress.show();

    //    RetrofitUtil.createProviderAPI().createUser(user_type ,directory_type , username , email , first_name , last_name , phone , password , confirm_password).enqueue(SignupUser(this));


        retrofit2.Call<ResponseBody> call = RetrofitClient.getInstance()
                .getApi().createUser(user_type ,directory_type , username , email , first_name , last_name , phone , password , confirm_password);
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                mRegProgress.dismiss();
                String s  = response.body().toString();
                Toast.makeText(Signup_Activity.this , "User Added Successfully", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Toast.makeText(Signup_Activity.this , t.getMessage() , Toast.LENGTH_SHORT).show();
            }
        });


    }
}

Вот мой api звонок ...

 @FormUrlEncoded
    @POST("user/do_signup")
    Call<ResponseBody> createUser(
            @Field("user_type") String user_type,
            @Field("directory_type") String directory_type,
            @Field("username") String username,
            @Field("email") String email,
            @Field("first_name") String first_name,
            @Field("last_name") String last_name,
            @Field("phone") String phone,
            @Field("password") String password,
            @Field("confirm_password") String confirm_password

    );

вот лог ....

01-22 18:07:39.096 21582-21603/? E/AudioALSAPlaybackHandlerBase: openPcmDriver(), pcm_start(0xea013780) fail due to cannot start channel: Broken pipe
01-22 18:07:39.156 21582-21603/? E/AudioALSAPlaybackHandlerBase: -getHardwareBufferInfo pcm_get_htimestamp fail, ret = -1, pcm_get_error = cannot start channel: Broken pipe
01-22 18:07:39.159 21582-21603/? E/AudioALSAPlaybackHandlerBase: -getHardwareBufferInfo pcm_get_htimestamp fail, ret = -1, pcm_get_error = cannot start channel: Broken pipe
01-22 18:07:39.168 21582-21603/? E/AudioFlinger: getNextBuffer, get null buffer
01-22 18:07:39.235 1009-1009/? E/WifiTrafficPoller: TRAFFIC_STATS_POLL true Token 1147 num clients 15
01-22 18:07:39.235 1009-1009/? E/WifiTrafficPoller:  packet count Tx=800555 Rx=1296057
01-22 18:07:39.235 1009-1009/? E/WifiTrafficPoller: notifying of data activity 2
01-22 18:07:40.236 1009-1009/? E/WifiTrafficPoller: TRAFFIC_STATS_POLL true Token 1147 num clients 15
01-22 18:07:40.236 1009-1009/? E/WifiTrafficPoller:  packet count Tx=800556 Rx=1296059
01-22 18:07:40.236 1009-1009/? E/WifiTrafficPoller: notifying of data activity 3
01-22 18:07:40.437 1009-1292/? E/WifiConfigStore: updateConfiguration freq=2427 BSSID=40:ee:dd:ac:a9:e8 RSSI=-56 "HUAWEI-XkKR"WPA_PSK
01-22 18:07:41.237 1009-1009/? E/WifiTrafficPoller: TRAFFIC_STATS_POLL true Token 1147 num clients 15
01-22 18:07:41.237 1009-1009/? E/WifiTrafficPoller:  packet count Tx=800556 Rx=1296059
01-22 18:07:41.237 1009-1009/? E/WifiTrafficPoller: notifying of data activity 0
01-22 18:07:42.238 1009-1009/? E/WifiTrafficPoller: TRAFFIC_STATS_POLL true Token 1147 num clients 15
01-22 18:07:42.240 1009-1009/? E/WifiTrafficPoller:  packet count Tx=800556 Rx=1296059
01-22 18:07:42.626 8508-8508/com.example.saadhashmi.docdirect E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.saadhashmi.docdirect, PID: 8508
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
        at com.example.saadhashmi.docdirect.Activities.Signup_Activity$4.onResponse(Signup_Activity.java:222)
        at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70)
        at android.os.Handler.handleCallback(Handler.java:819)
        at android.os.Handler.dispatchMessage(Handler.java:104)
        at android.os.Looper.loop(Looper.java:210)
        at android.app.ActivityThread.main(ActivityThread.java:5982)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:852)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:742)
01-22 18:07:42.674 1009-15376/? E/ReportTools: This is not beta user build
01-22 18:07:42.808 1009-2455/? E/HsmCoreServiceImpl: onTransact in code is: 102
01-22 18:07:42.878 1009-2117/? E/WifiMonitor: handleEvent unknown: 14  CTRL-EVENT-SCAN-STARTED 
01-22 18:07:42.911 2570-3200/? E/CellLocation: create GsmCellLocation
01-22 18:07:43.089 8722-8722/com.example.saadhashmi.docdirect E/MultiWindowProxy: getServiceInstance failed!

Ответы [ 2 ]

0 голосов
/ 22 января 2019

при получении ответа вы всегда должны проверять, является ли полученный вами ответ нулевым или нет, а затем только печатать ваш ответ, иначе он выдаст NPE.измените свой код следующим образом ->

public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
        mRegProgress.dismiss();
        if (response.isSuccessful()) {
            if (response.body() != null) {
                String s = response.body().toString();
                Toast.makeText(Signup_Activity.this, "User Added Successfully", Toast.LENGTH_SHORT).show();
            } 
        else {
            log.d(TAG, "Null Response Body");
        }
      }
      else{
            log.d(TAG,"response UnSuccessful");
      }
    }
0 голосов
/ 22 января 2019

Вы должны проверить свой ответ, который был успешным или имел ошибку или возникла какая-то проблема на сервере. Вы должны проверить свой http код ответа и тему этого.

response.code() дает вам этот http код ответа

Функция

и isSuccessful() проверяет, что этот код находится в диапазоне 200 ~ 300, что означает успешный ответ!

 public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
    mRegProgress.dismiss();
    if(response.isSuccessful()){
         String s  = response.body().toString();
         Toast.makeText(Signup_Activity.this , "User Added Successfully", Toast.LENGTH_SHORT).show();
    } else {
         Log.i("Error ",response.errorBody())
    }                   
}
...