Войти с модификацией в Android - PullRequest
       31

Войти с модификацией в Android

0 голосов
/ 15 декабря 2018

Я пытаюсь использовать логин API через retrofit.Мне нужно отправить только номер мобильного телефона.Когда я использую postman тело, оно получает вывод.но когда я звоню с android, он получает ошибку json, как показано ниже

{
"error": "Validation error",
"error_code": "001",
"Validation_errors": {
    "mobile": "<p>The Mobile field is required.</p>"
}
}

HomeActivity.class

 ApiInterface apiService =
                                ApiClient.getClient().create(ApiInterface.class);
                        Map<String,String> user = new HashMap<>();
                        user.put("mobile",username.getText().toString().trim());

                        Call<ResponseBody> mService = apiService.loginwithno(user);
                        Log.d("TAG", "response: " + mService.toString());
                        mService.enqueue(new Callback<ResponseBody>() {
                            @Override
                            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                                if (response.isSuccessful()) {
                                    try {
                                        String result = response.body().string();
                                        JSONObject mJsonObject = new JSONObject(result);
                                        Log.d("TAG", "response: " + mJsonObject.toString());

                                    } catch (JSONException e) {
                                        e.printStackTrace();
                                    } catch (IOException e) {
                                        e.printStackTrace();
                                    }
                                } else {
                                    buttonVisible();
                                    username.setError("Please try again");
                                }
                            }

                            @Override
                            public void onFailure(Call<ResponseBody> call, Throwable t) {
                                call.cancel();
                                buttonVisible();
                                Snackbar snackbar = Snackbar.make(buttonLogin,
                                        "Please check your internet connection", Snackbar.LENGTH_LONG);
                                snackbar.show();

                            }

ApiClient

public class ApiClient {
public static final String BASE_URL = "http://nast.in/driverpool/api/index.php/";
private static Retrofit retrofit = null;

public static Retrofit getClient() {
        retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    return retrofit;
}
}

ApiInterface

public interface ApiInterface {


@POST("account/login?")
Call<ResponseBody> loginwithno(@Body Map<String, String> mobile);

@POST("account/verifyotp")
Call<ResponseBody> verifyotp(@Body HashMap<String, String> mobile);//Param name: mobile, otp

@POST("account/resendotp")
Call<ResponseBody> resentotp(@Body HashMap<String, String> mobile);
}

Скриншот почтальона enter image description here

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Вам нужно внести несколько изменений в код.

  • Измените API для входа в систему, чтобы получать json, как это, включите библиотеку gson, если вы не добавили в проект.

    
    @POST("account/login?")
    Call loginwithno(@Body Map mobile);
    
  • Создайте объект ApiErrorResponse для обработки вашей ошибки API.При необходимости добавьте getter, setter и @SerializedName.

    
     class ApiErrorResponse{
        String error;
        String error_code;
        ValidationErrors Validation_errors; 
     } 
     class ValidationErrors{
        String mobile;
     }
     
  • на дескрипторе ошибки API, например:

    
       if(!response.isSuccessful()){
            Converter converter =
                    ApiClient.getClient().responseBodyConverter(ApiErrorResponse.class, new Annotation[0]);
            ApiErrorResponse errors = null;
            try {
                errors = converter.convert(response.errorBody());
            } catch (Exception e) {</p>
    
    <pre><code>    }
        if(errors!=null){
         //Handle your API Error logic here
        }
    

    }

0 голосов
/ 15 декабря 2018

Сначала тебе не нужно '?'в вашем API, и я думаю, что вы должны отправить JSON в вашем теле @, так что создайте класс, как этот

public class SendLoginData{
    @SerializedName("mobile")
    public String mobile;

    public SendLoginData(String mobile) {
        this.mobile = mobile;
    }
}

И используйте его в ApiInterface

@POST("account/login")
Call<ResponseBody> loginwithno(@Body SendLoginData post);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...