Как проверить номер мобильного телефона на основе ответа от API? - PullRequest
0 голосов
/ 10 мая 2018

У меня есть бэкэнд API в node.js и создание из него приложения для Android. В приложении для Android есть два текстовых поля и одна кнопка отправки. После того, как пользователь заполнит оба поля и нажмет кнопку «Отправить», я хочу проверить, существует ли уже мобильный или нет. Я использую retrofit2 для вызова API. Теперь проблема в том, что вызов API для подтверждения мобильного телефона и модернизации с использованием асинхронного вызова требует следующего кода, а сначала запускается ответ API. И я хочу отображать счетчик во время работы API. Но я не в состоянии это сделать. Пожалуйста, помогите с кодом, так как я новичок в Android.

Вот RegisterActivity.java файл:

package com.example.narmail.truck30mint;

import android.content.Intent;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.SharedPreferences;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.example.narmail.truck30mint.Api.services.UserApi;
import com.example.narmail.truck30mint.Api.services.NetworkStatus;

public class RegisterActivity extends AppCompatActivity {
    EditText registerMobileInput, registerPasswordInput;
    Button registerButton;
    ProgressBar progressBar;
    public static String existmsg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        progressBar = findViewById(R.id.progressBar);
        registerMobileInput = findViewById(R.id.registerMobileInput);
        registerPasswordInput = findViewById(R.id.registerPasswordInput);
        registerButton = findViewById(R.id.registerButton);

        registerButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (NetworkStatus.isOnline(getApplicationContext())) {
                    if (validate()) {
                        Intent data = new Intent(RegisterActivity.this, OtpActivity.class);
                        data.putExtra("mobile", registerMobileInput.getText().toString());
                        data.putExtra("pass", registerPasswordInput.getText().toString());
                        startActivity(data);
                    }
                } else {
                    Toast.makeText(getApplicationContext(), "Please connect to internet", Toast.LENGTH_LONG).show();
                }
            }
        });
    }

    public boolean validate() {
        if (registerMobileInput.getText().toString().trim().length() == 0) {
            Toast.makeText(getApplicationContext(), "mobile number is mandatory", Toast.LENGTH_LONG).show();
            return false;
        } else if (registerMobileInput.getText().toString().trim().length() > 0 && registerMobileInput.getText().toString().trim().length() != 10) {
            Toast.makeText(getApplicationContext(), "Enter correct mobile number", Toast.LENGTH_LONG).show();
            return false;
        } else if (registerMobileInput.getText().toString().trim().length() == 10) {
            UserApi.mobileExist(registerMobileInput.getText().toString());

            while (existmsg == null) {
                progressBar.setVisibility(View.VISIBLE);
                System.out.println("in while loop");
            }
            progressBar.setVisibility(View.GONE);
            System.out.println("just below method called");
            if (existmsg != null && existmsg.equalsIgnoreCase("exist")) {
                Toast.makeText(getApplicationContext(), "mobile number already exist please login", Toast.LENGTH_LONG).show();
                return false;
            } else if (existmsg != null && existmsg.equalsIgnoreCase("notExist")) {
                return true;
            } else {
                Toast.makeText(getApplicationContext(), "Some error occured plz try again", Toast.LENGTH_LONG).show();
                return false;
            }
        } else if (registerPasswordInput.getText().toString().trim().length() == 0) {
            Toast.makeText(getApplicationContext(), "Password is mandatory", Toast.LENGTH_LONG).show();
            return false;
        } else if (registerPasswordInput.getText().toString().trim().length() < 6) {
            Toast.makeText(getApplicationContext(), "Please enter Min 6 chars", Toast.LENGTH_LONG).show();
            return false;
        }
        return true;
    }
}

Вот класс модели Java

package com.example.narmail.truck30mint.Api.models;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class mobileExist {
    @SerializedName("status")
    @Expose
    private String status;

    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
}

Вот Api

package com.example.narmail.truck30mint.Api.services;

import android.util.Log;

import com.example.narmail.truck30mint.Api.interfaces.UserClient;
import com.example.narmail.truck30mint.Api.models.mobileExist;
import com.example.narmail.truck30mint.RegisterActivity;
import com.google.gson.GsonBuilder;

import java.util.concurrent.Executors;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class UserApi {
    private static String mobile_exist_url = "http://10.0.2.2:3002/";
    private static Retrofit retrofit;
    private static UserClient apiInterface;
    private static String mobileNoStatus;
    private static String signupStatus;
    private static Retrofit getMobileExist(){
        if (retrofit == null) {
            retrofit = new Retrofit.Builder().baseUrl(mobile_exist_url).callbackExecutor(Executors.newSingleThreadExecutor()).
                    addConverterFactory(GsonConverterFactory.create()).build();
        }
        return retrofit;
    }
    /*activity method start*/
    public static void mobileExist(String mobile){
        apiInterface = UserApi.getMobileExist().create(UserClient.class);
        Call<mobileExist> call = apiInterface.getMobileExist(mobile);
        call.enqueue(new Callback<mobileExist>() {
            @Override
          public void onResponse(Call<mobileExist> call, Response<mobileExist> response) {
                if (response.isSuccessful()) {
                    System.out.println("response is successfull");
                    RegisterActivity.existmsg = response.body().getStatus();
                } else {
                    RegisterActivity.existmsg = "error";
                     Log.w("status ",new GsonBuilder().setPrettyPrinting().create().toJson(response));
                }
                // Log.w("status ",new GsonBuilder().setPrettyPrinting().create().toJson(response));
               // System.out.println("in response is now" + mobileNoStatus);
            }
                @Override
                public void onFailure (Call < mobileExist > call, Throwable t){
                    RegisterActivity.existmsg = "error";
                    Log.v("error", "is", t);
                }
        });
      // return false;
    }
}

Вот файл макета

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout                                                               xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".RegisterActivity">

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:textSize="20sp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="@string/pleaseRegister"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.386"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.128" />


    <EditText
        android:id="@+id/registerMobileInput"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:ems="10"
        android:inputType="phone"
        android:hint="@string/mobileHintRegister"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.503"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.358" />

    <EditText
        android:id="@+id/registerPasswordInput"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:ems="10"
        android:hint="@string/passwordHintRegister"
        android:inputType="textPassword"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.503"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.498" />

    <Button
        android:id="@+id/registerButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="@string/register"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.453"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.653" />

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:visibility="invisible"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.459"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.223" />

</android.support.constraint.ConstraintLayout>

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Я изменил вам как код RegisterActivity, так и код UserApi. Вы можете использовать этот код ниже. Я добавил интерфейс для обработки вашего мобильного обратного вызова проверки

RegisterActivity.java

   public class RegisterActivity extends AppCompatActivity implements ValidateMobile {
    EditText registerMobileInput, registerPasswordInput;
    Button registerButton;
    ProgressBar progressBar;
    public static String existmsg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        progressBar = findViewById(R.id.progressBar);
        registerMobileInput = findViewById(R.id.registerMobileInput);
        registerPasswordInput = findViewById(R.id.registerPasswordInput);
        registerButton = findViewById(R.id.registerButton);

        registerButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (NetworkStatus.isOnline(getApplicationContext())) {
                    validate();
                } else {
                    Toast.makeText(getApplicationContext(), "Please connect to internet", Toast.LENGTH_LONG).show();
                }
            }
        });
    }

    public void validate() {
        if (registerMobileInput.getText().toString().trim().length() == 0) {
            Toast.makeText(getApplicationContext(), "mobile number is mandatory", Toast.LENGTH_LONG).show();
        } else if (registerMobileInput.getText().toString().trim().length() > 0 && registerMobileInput.getText().toString().trim().length() != 10) {
            Toast.makeText(getApplicationContext(), "Enter correct mobile number", Toast.LENGTH_LONG).show();
        } else if (registerMobileInput.getText().toString().trim().length() == 10) {
            UserApi.mobileExist(registerMobileInput.getText().toString());
            progressBar.setVisibility(View.VISIBLE);
        }
    }

    public void startOtp() {
        Intent data = new Intent(RegisterActivity.this, OtpActivity.class);
        data.putExtra("mobile", registerMobileInput.getText().toString());
        data.putExtra("pass", registerPasswordInput.getText().toString());
        startActivity(data);
    }

    public void validateAndStartOtp() {
        if (registerPasswordInput.getText().toString().trim().length() == 0) {
            Toast.makeText(getApplicationContext(), "Password is mandatory", Toast.LENGTH_LONG).show();
        } else if (registerPasswordInput.getText().toString().trim().length() < 6) {
            Toast.makeText(getApplicationContext(), "Please enter Min 6 chars", Toast.LENGTH_LONG).show();
        } else {
            startOtp();
        }
    }

    @Override
    public void onMobileValidateSuccess() {
        progressBar.setVisibility(View.GONE);
    }

    @Override
    public void onMobileValidateFailed() {
        progressBar.setVisibility(View.GONE);
        Toast.makeText(getApplicationContext(), "mobile number already exist please login", Toast.LENGTH_LONG).show();
    }
}

UserApi.java

import android.content.Context;
import android.util.Log;

import com.example.narmail.truck30mint.Api.interfaces.UserClient;
import com.example.narmail.truck30mint.Api.models.mobileExist;
import com.example.narmail.truck30mint.RegisterActivity;
import com.google.gson.GsonBuilder;

import java.util.concurrent.Executors;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class UserApi {
    private static String mobile_exist_url = "http://10.0.2.2:3002/";
    private static Retrofit retrofit;
    private static UserClient apiInterface;
    private static String mobileNoStatus;
    private static String signupStatus;
    private static Retrofit getMobileExist(){
        if (retrofit == null) {
            retrofit = new Retrofit.Builder().baseUrl(mobile_exist_url).callbackExecutor(Executors.newSingleThreadExecutor()).
                    addConverterFactory(GsonConverterFactory.create()).build();
        }
        return retrofit;
    }
    /*activity method start*/
    public static void mobileExist(String mobile, Context mContext){

        // Interface callback
        final ValidateMobile callback = (ValidateMobile) mContext;

        apiInterface = UserApi.getMobileExist().create(UserClient.class);
        Call<mobileExist> call = apiInterface.getMobileExist(mobile);
        call.enqueue(new Callback<mobileExist>() {
            @Override
          public void onResponse(Call<mobileExist> call, Response<mobileExist> response) {
                if (response.isSuccessful()) {
                    // On success call this callback function   
                    callback.onMobileValidateSuccess();
                    System.out.println("response is successfull");
                } else {
                    // On failure call this callback function
                    callback.onMobileValidateFailed();
                    RegisterActivity.existmsg = "error";
                     Log.w("status ",new GsonBuilder().setPrettyPrinting().create().toJson(response));
                }
                // Log.w("status ",new GsonBuilder().setPrettyPrinting().create().toJson(response));
               // System.out.println("in response is now" + mobileNoStatus);
            }
                @Override
                public void onFailure (Call < mobileExist > call, Throwable t){
                    callback.onMobileValidateFailed();
                    RegisterActivity.existmsg = "error";
                    Log.v("error", "is", t);
                }
        });
      // return false;
    }
}

ValidateMobile.java

public interface ValidateMobile {
    public void onMobileValidateSuccess();
    public void onMobileValidateFailed();
}
0 голосов
/ 10 мая 2018
public static void mobileExist(String mobile, Context context){
    **Utility.showProgressDialog(context, "Please wait"); **
    apiInterface = UserApi.getMobileExist().create(UserClient.class);
    Call<mobileExist> call = apiInterface.getMobileExist(mobile);
    call.enqueue(new Callback<mobileExist>() {
        @Override
        public void onResponse(Call<mobileExist> call, Response<mobileExist> response) {
            if (response.isSuccessful()) {
                **Utility.dismissProgressDialog(); **
                System.out.println("response is successfull");
                RegisterActivity.existmsg = response.body().getStatus();
            } else {
                RegisterActivity.existmsg = "error";
                Log.w("status ",new GsonBuilder().setPrettyPrinting().create().toJson(response));
            }
            // Log.w("status ",new GsonBuilder().setPrettyPrinting().create().toJson(response));
            // System.out.println("in response is now" + mobileNoStatus);
        }
        @Override
        public void onFailure (Call < mobileExist > call, Throwable t){
            RegisterActivity.existmsg = "error";
            **Utility.dismissProgressDialog(); **
            Log.v("error", "is", t);
        }
    });
}

Инициировать диалоговое окно прогресса, как только будет вызван мобильный диалог, и закрыть, когда вы закончите с ответом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...