Извлечение данных из response.body дает нулевое обновление в Android - PullRequest
0 голосов
/ 22 октября 2018

Эй, я пытаюсь получить данные из моего API, используя модификацию с бэкэндом node.js, а затем установить его в Textview.Я могу подключиться к API успешно, но у меня возникают проблемы, когда я пытаюсь установить текст для просмотра текста.У меня есть функция getCompanyname в моем pojo , когда я пытаюсь использовать эту функцию, чтобы установить текст, она ничего не показывает в текстовом представлении, и когда я пробовал это в сообщении Toast, это дает ноль как сообщение поэтому я считаю, что мой метод имеет нулевое значение, но я не смог найти проблему.Ниже необходим код

1) код RequestInterface

public interface RetrofitInterface {

@POST("logins")
Call<ServerResponse> operation(@Body ServerRequest request);
@GET("getbusinessprofile/{username}")
Call<CompanyInfo> getCompanydetails(@Path("username")String username);
}

2) панель приборов frag

public void getCompanyData(String username){

           Retrofit retrofit = new Retrofit.Builder()
                              .baseUrl(Constants.BASE_URL)
                              .addConverterFactory(GsonConverterFactory.create())
                              .build();

    RetrofitInterface requestInterface = retrofit.create(RetrofitInterface.class);
    Call<CompanyInfo> callResponse = requestInterface.getCompanydetails(username);

    callResponse.enqueue(new Callback<CompanyInfo>() {
        @Override
        public void onResponse(Call<CompanyInfo> call, Response<CompanyInfo> response) {

           CompanyInfo info=response.body();
           comp_text.setText(info.getCompanyname());
           mail_text.setText(info.getEmail());
           gst_text.setText(info.getGstNo());
            Toast.makeText(getActivity(), "Company name-> "+info.getCompanyname(), Toast.LENGTH_SHORT).show();


        }

MygetCompanyname, getGST, getEmail все они имеют значение null

Вот мой ответ json на консоли

{"companyname":"hitouch","email":"a@b.com","gst_no":"12354"}

3) ** CompanyInfo.java

public class CompanyInfo {

@SerializedName("companyname")
@Expose
private String companyname;
@SerializedName("email")
@Expose
private String email;
@SerializedName("gst_no")
@Expose
private String gstNo;

public String getCompanyname() {
    return companyname;
}

public void setCompanyname(String companyname) {
    this.companyname = companyname;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getGstNo() {
    return gstNo;
}

public void setGstNo(String gstNo) {
    this.gstNo = gstNo;
}

}

Пожалуйста, предложите мнечто-то, и если вы хотите, я могу опубликовать свой внутренний код node.js

СПАСИБО !!

Редактировать

Debug response

1 Ответ

0 голосов
/ 22 октября 2018

Поскольку ответ такой:

{
    "statusCode": 200,
    "headers": {
        "Content-Type": "application/json"
    },
    "body": { "companyname": "hitouch", "email": "a@b.com", "gst_no": "12354" }
}

, вы должны использовать pojo вот так

public class CompanyInfoResponse {
    @SerializedName("statusCode")
    int statusCode;

    @SerializedName("headers")
    Map<String, String> headers;        

    @SerializedName("body")
    CompanyInfo companyInfo;
}

Измените его на

@GET("getbusinessprofile/{username}")
Call<ApiResponse<CompanyInfo>> 
        getCompanydetails(@Path("username")String username);

Чтобы получить актуальныйdata

CompanyInfo companyInfo = response.body().getBody();

Если вы хотите применить его к другому типу ответа, например EmployeeInfo, вы можете использовать обертку, подобную этой

public class ApiResponse<T> {
    private transient boolean isSuccess;

    @SerializedName("statusCode")
    private int statusCode;
    @SerializedName("headers")
    Map<String, String> headers;
    @SerializedName("body")
    private T body;

    @Nullable
    public int getStatusCode() {
        return statusCode;
    }

    @Nullable
    public Map<String, String> getHeaders() {
        return headers;
    }

    @Nullable
    public T getBody() {
        return body;
    }
}

Затем объявите вот так

@GET("getbusinessprofile/{username}")
Call<ApiResponse<CompanyInfo>> getCompanydetails(@Path("username")String username);

@GET("getbusinessprofile/{username}")
Call<ApiResponse<EmployeeInfo>> getEmployeeDetails(@Path("username")String username);

Для получения актуальных данных

CompanyInfo companyInfo = response.body().getBody();
EmployeeInfo empInfo = response.body().getBody();
...