POST API возвращает нулевые значения из retrofit, но работает в postman

#java #android #json #retrofit2

#java #Android #json #retrofit2

Вопрос:

Я немного новичок в retrofit и Android, поэтому я действительно смущен

См. Ниже Ошибку, которую я получаю от Retrofit, когда пытаюсь использовать API с приведенной ниже структурой

Ошибка

   D/LOGIN: onResponse: >> UserOutputObj{response='null', response_text='null', user=null, status=null, response_Code=0, message='null', msg='null', token='null', zero=0}
 

Пожалуйста, посоветуйте мне, как использовать API без получения вышеуказанной ошибки.

Смотрите мой код ниже

Модифицированный экземпляр клиента

 public static Retrofit getLogInRetrofitInstance() {
        if (retrofit == null) {
            Gson gson = new GsonBuilder()
                    .setLenient()
                    .create();

            retrofit = new retrofit2.Retrofit.Builder()
                    .baseUrl(LOG_IN_BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create(gson))
                    .build();
        }
        return retrofit;
    }
 

Служба данных входа

 import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Headers;
import retrofit2.http.POST;

public interface GetLogInDataService {
    @Headers("Content-Type: application/json")
    @POST("login")
    Call<UserOutputObj> getServiceData(@Body LoginInputObj input);
}
 

фактическая реализация

    //retrofit starts ===
                GetLogInDataService service = RetrofitClientInstance.getLogInRetrofitInstance().create(GetLogInDataService.class);
                Call<OutputObj> call = service.getServiceData(myLoginInp);
                call.enqueue(new Callback<OutputObj>() {
                    @Override
                    public void onResponse(Call<OutputObj> call, Response<OutputObj> response) {
                        OutputObj finalOutput = response.body();
                        Log.d(TAG, "onResponse: >> "  response.body().toString());
                        assert finalOutput != null;
                        Log.d(TAG, "onResponse: finalOutput >>"   finalOutput.toString());
                        UserInfo user = finalOutput.getUser();
                        Log.d(TAG, "onResponse: user:"   user);

                        if (user != null) {
                            Login_Token = finalOutput.getToken();
                            Login_Message = finalOutput.getMessage();
                            Login_status = finalOutput.getStatus();                 if (Login_status) {
                                Log.d(TAG, "onResponse: status is Successful");
                                type = user.getType();
                                name = user.getFullname();
                                dob = user.getDob();
                                city = user.getCity();
                                email = user.getEmail();
                                id = String.valueOf(user.getId());
                                gender = user.getGender();
                                rating = user.getRating();
                                Log.d(TAG, "doInBackground: Login_Token: "   Login_Token);
    
                            } else {
                                Log.d(TAG, "onResponse: status is false");
                            }
    
                        Log.d(TAG, "doInBackground: VERIFY: "   Login_status);
                        Log.d(TAG, "doInBackground: Login_Message: "   Login_Message);
                        server_check = true;

                    }

                    @Override
                    public void onFailure(Call<UserOutputObj> call, Throwable t) {
                        Log.d(TAG, "onFailure: INSIDE: onFailure");
                        Log.d(TAG, "onFailure: INSIDE: onFailure");
                        Log.d(TAG, "onFailure: AN ERROR OCCURRED");
                        Log.d(TAG, "onFailure: Cause "   t.getCause());
                        Log.d(TAG, "onFailure: getMessage "   t.getMessage());
                        Toast.makeText(LoginActivity.this, "Something went wrong...Please try later!", Toast.LENGTH_SHORT).show();
                    }
                });
 

вывод журнала

 D/LOGIN: onResponse: >> UserOutputObj{response='null', response_text='null', user=null, status=null, response_Code=0, message='null', msg='null', token='null', zero=0}
 

D/LOGIN: onResponse: finalOutput >>UserOutputObj{response=’null’, response_text=’null’, user=null, status=null, response_Code=0, message=’null’, msg=’null’, token=’null’, zero=0}

I expect to get either the below JSON FAILURE RESPONSE or JSON SUCCESS RESPONSE and not the null responses i keep geting

JSON FAILURE RESPONSE

 {
    "OutputObject": {
        "response": "0",
        "status": false,
        "response_text": "user does not exists",
        "message": "Number Not exist",
        "response_Code": 400
    }
}
 

JSON SUCCESS RESPONSE

 {
    "response": {
        "status": true,
        "message": "Login Succesful",
        "token": "160444ef2fe0321-12P28071e2d6934764",
        "user": {
            "id": 3,
            "created_at": "2020-11-03T19:40:34.000000Z",
            "updated_at": "2020-11-03T19:40:34.000000Z",
            "fullname": "Mr Guy 4",
            "email": "mekefesassfeghe@gmail.com",
            "email_verified_at": "2020-11-03T21:52:01.941539Z",
            "type": "Customer",
            "father_name": null,
            "gender": "male",
            "dob": "1983/01/26",
            "number": "19077834474589",
            "city": "Yosemeni Park",
            "state": "Las Vegas",
            "country": "United States",
            "address": "No 500 Correct address street",
            "status": "",
            "rating": 0,
            "token_id": "",
            "reg_date": "2020-11-03 19:40:34"
        },
        "response_Code": 200
    }
}
 

сериализованный объект

 @Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class OutputObj implements Serializable {

    @Getter
    @Setter
    private String response;

    @Getter
    @Setter
    private String response_text;

    @Getter
    @Setter
    private UserInfo user;

    @Getter
    @Setter
    private Boolean status;

    @Getter
    @Setter
    private int response_Code;

    @Getter
    @Setter
    private String message;

    @Getter
    @Setter
    private String msg;

    @Getter
    @Setter
    private String token;

    @Getter
    @Setter
    private int zero;

    @Override
    public String toString() {
        return "OutputObj{"  
                "response='"   response   '''  
                ", response_text='"   response_text   '''  
                ", user="   user  
                ", status="   status  
                ", response_Code="   response_Code  
                ", message='"   message   '''  
                ", msg='"   msg   '''  
                ", token='"   token   '''  
                ", zero="   zero  
                '}';
    }
}
 

API отлично работает при вызове с использованием Postman, но возвращает нулевые значения из приложений, использующих retrofit
Пожалуйста, посоветуйте мне, как использовать API, поскольку я уже неделю ломаю голову над этим

Ответ №1:

Я предполагаю, что retrofit не любит одиночные косые черты, мне нужно было изменить базовый URL на что-то без косой черты