#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 на что-то без косой черты