Я создал тонкую поддержку бэкэнда для моего приложения и определил функцию, которая должна проверять, будут ли параметры, которые будут отправлены, соответствующие параметры должны быть опубликованы. Теперь, когда я отправляю запрос POST с помощью POSTMAN,это выполняется хорошо. Но когда я отправляю запрос, используя модификацию в моем приложении для Android, тогда «требуемые параметры отсутствуют».
Я пытался преобразовать json_decode () для декодирования данных, когда запрашиваемые параметры передаются в функцию checkIfEmpty.
class CheckEmptyParams{
function paramsCheck($required_params,$request,$response){
$error = false;
$error_params = '';
$request_params = $request->getParsedBody();
foreach($required_params as $param){
if(!isset($request_params[$param]) || strlen($request_params[$param])<0){
$error = true;
$error_params .= $param . ',';
}
}
if($error){
$error_detail = array();
$error_detail['error'] = true;
$error_detail['message'] = 'Required Parameters are missing- ' .substr($error_params,0,-1);
$response->write(json_encode($error_detail));
$response->withHeader('Content-Type','application/json')
->withStatus(422);
}
return $error;
}
}
$app->post('/userlogin',function(Request $request,Response $response){
$params_check = new CheckEmptyParams;
if(!$params_check->paramsCheck(array('email','password'),$request,$response)){
$request_data = $request->getParsedBody();
$email = $request_data['email'];
$password = $request_data['password'];
$db = new DbOperations;
$result = $db->userLogin($email,$password);
if($result == USER_AUTHENTICATED){
$response_data = array();
$response_data['error'] = false;
$response_data['message'] = 'User Authentication Successful';
$response->write(json_encode($response_data));
return $response->withHeader('Content-Type','application/json')
->withStatus(200);
}
else if($result == USER_NOT_FOUND){
$response_data = array();
$response_data['error'] = true;
$response_data['message'] = 'User not found';
$response->write(json_encode($response_data));
return $response->withHeader('Content-Type','application/json')
->withStatus(422);
}
else if($result == USER_PASSWORD_DO_NOT_MATCH){
$response_data = array();
$response_data['error'] = true;
$response_data['message'] = 'Password do not match';
$response->write(json_encode($response_data));
return $response->withHeader('Content-Type','application/json')
->withStatus(422);
}
$response_data = array();
$response_data['error'] = true;
$response_data['message'] = 'Some error occured';
$response->write(json_encode($response_data));
return $response->withHeader('Content-Type','application/json')
->withStatus(422);
}});
Я ожидаю, что вывод будет ложным, поскольку логическое значение, возвращаемое этой функцией при отправке запроса POST с использованием модификации.
Код Android -
public interface ApiServices {
@Headers({"Content-Type:application/json"})
@FormUrlEncoded
@POST("userlogin")
Call<LoginModel> getLoginData(@Field("email")String email,
@Field("password")String password);
}
private void login(String email,String password){
final Snackbar mLoading = Snackbar.make(mFrameLayout,"Logging in...Please wait",Snackbar.LENGTH_INDEFINITE);
mLoading.show();
ApiClient.getInstance().getApi().getLoginData(email,password).enqueue(new Callback<LoginModel>() {
@Override
public void onResponse(Call<LoginModel> call, Response<LoginModel> response) {
if(getActivity()!=null && isAdded()) {
if(response.isSuccessful()){
mLoading.dismiss();
if(response.code()==200){
if(!response.body().isError()){
Snackbar.make(mFrameLayout,response.body().getMessage(),Snackbar.LENGTH_INDEFINITE).show();
}
else{
Snackbar.make(mFrameLayout,response.body().getMessage(),Snackbar.LENGTH_SHORT).show();
}
}
else if(response.code()==422){
Snackbar.make(mFrameLayout, getResources().getString(R.string.text_server_down_error), Snackbar.LENGTH_SHORT).show();
}
}
else{
mLoading.dismiss();
Snackbar.make(mFrameLayout, getResources().getString(R.string.text_server_connection_error),Snackbar.LENGTH_SHORT).show();
}
}
}
@Override
public void onFailure(Call<LoginModel> call, Throwable t) {
mLoading.dismiss();
if(getActivity()!=null&& isAdded()){
Snackbar.make(mFrameLayout, getResources().getString(R.string.text_server_connection_fail),Snackbar.LENGTH_SHORT).show();
}
}
});
}
Запрос отправляется в POSTMAN, но не в приложении для Android. Запрос отправлен в POSTMAN