не получает данные из php Api методом post - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь получить данные из API, где я должен использовать метод post как новичок. У меня нет опыта работы с методом post дооснащения, но из других вопросов StackOverflow я могу получить код, но когда я ставлюимя пользователя и пароль Я получаю сообщение об ошибке 400, поскольку я не могу передать данные на сервер. Вот код

APIInterface:

public interface APIInterface {
@POST("http://tvsfit.mytvs.in/reporting/vrm/api/test_new/int/gettabledata.php")
Call<LoginResponse> createUser(@Body LoginResponse login);
}

APIClient:

class APIClient {

public static final String BASE_URL = "http://tvsfit.mytvs.in/reporting/vrm/api/test_new/int/gettabledata.php/";
private static Retrofit retrofit = null;

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

getter-setter:

public class LoginResponse {


@SerializedName("username")
public String UserId;
@SerializedName("FirstName")
public String FirstName;
@SerializedName("LastName")
public String LastName;
@SerializedName("ProfilePicture")
public String ProfilePicture;
@SerializedName("Password")
public String Password;
   public LoginResponse(String UserId, String Password) {
    this.UserId = UserId;
    this.Password = Password;
}

Я получаю такую ​​ошибку

`Response {protocol = http / 1.1, code = 400, message = Bad Request, url = http://tvsfit.mytvs.in/reporting/vrm/api/test_new/int/gettabledata.php}'

Любое направление, что я делаю неправильно, будет полезно {"username": "test", "password": "123456"} пример вывода, который я должен получить

{"TABLE_DATA":"{\"data\":[[\"Tiger Nixon\",\"System Architect\",\"Edinburgh\",\"5421\",\"2011\/04\/25\",\"$320,800\"]...

Метод действия:

 private void loginRetrofit2Api(String userId, String password) {
    final LoginResponse login = new LoginResponse(userId, password);
    Call<LoginResponse> call1 = apiInterface.createUser(login);
    call1.enqueue(new Callback<LoginResponse>() {
        @Override
        public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
            Log.e("Login", response.toString());


        }

        @Override
        public void onFailure(Call<LoginResponse> call, Throwable t) {
            Toast.makeText(getApplicationContext(), "onFailure called ", Toast.LENGTH_SHORT).show();
            call.cancel();
        }
    });
}

public boolean checkValidation() {
    userId = et_Email.getText().toString();
    password = et_Pass.getText().toString();
    if (et_Email.getText().toString().trim().equals("")) {
        CommonMethod.showAlert("UserId Cannot be left blank", MainActivity.this);
        return false;
    } else if (et_Pass.getText().toString().trim().equals("")) {
        CommonMethod.showAlert("password Cannot be left blank", MainActivity.this);
        return false;
    }
    return true;
}

Класс CommonMethod:

public  static boolean isNetworkAvailable(Context ctx) {
    ConnectivityManager connectivityManager
            = (ConnectivityManager)ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

public static void showAlert(String message, Activity context) {

    final AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setMessage(message).setCancelable(false)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {

                }
            });
    try {
        builder.show();
    } catch (Exception e) {
        e.printStackTrace();
    }

}

данные: data recieved

Ответы [ 3 ]

1 голос
/ 08 марта 2019

Вы делаете несколько вещей неправильно здесь.

Сначала вам нужно правильно настроить базовый URL.

public static final String BASE_URL = "http://tvsfit.mytvs.in/"

Теперь измените путь в вызове метода соответственно. Вам необходимо указать путь, который будет добавлен после базового URL.

public interface APIInterface {
@POST("reporting/vrm/api/test_new/int/gettabledata.php")
Call<LoginResponse> createUser(@Body LoginResponse login);
}

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

@SerializedName("password")    //in sample request you are using password and not Password
public String Password;
0 голосов
/ 08 марта 2019

Вы проверили этот API в Почтальон , работает ли он хорошо или нет, когда я тестирую этот API в Почтальон.он показывает ошибку 400 и показывает сообщение об ошибке {"ErrorDescription": "Отсутствуют обязательные параметры", "Ошибка": 400} .it 'вы не передаете все параметры для этого APIвызов.смотрите этот скриншот. скриншот ошибки API

0 голосов
/ 07 марта 2019

Что вы должны делать, это что-то вроде:

public interface APIInterface {
@POST("http://tvsfit.mytvs.in/reporting/vrm/api/test_new/int/gettabledata.php")
Call<LoginResponse> createUser(@String userId, @String password);
}

LoginResponse - это ваш класс для обработки ответа.Поэтому нет смысла передавать аргументы при попытке войти в систему.Вы бы выглядели так:

Call<LoginResponse> call1 = apiInterface.createUser(userId, password);

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

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