[英]Retrofit 2 - response body gives null value
I want to retrieve data from a web service to textview. 我想从Web服务检索数据到textview。 Web service works well.
Web服务运行良好。 I'm using retrofit for network.
我正在对网络进行改造。 But I'm getting null in prmoDetails here response.body.
但是我在prmoDetails这里的response.body中得到了空值。 I have checked and tried all past solutions as well.
我已经检查并尝试了所有过去的解决方案。 But still it's not working.
但仍然无法正常工作。 Please help me to solve this.
请帮我解决这个问题。
POJO class POJO课
public class PromoDetails {
private String PromoId;
private String PromoName;
private String Category;
private String PromoImg;
private String promoDetails;
private String promoValidty;
public PromoDetails(String PromoId, String PromoName, String Category , String PromoImg , String promoDetails , String promoValidity) {
this.PromoId = PromoId;
this.PromoName = PromoName;
this.Category = Category;
this.PromoImg = PromoImg;
this.promoDetails = promoDetails;
this.promoValidty = promoValidity;
}
public String getPromoId() {
return PromoId;
}
public void setPromoId(String promoId) {
PromoId = promoId;
}
public String getPromoName() {
return PromoName;
}
public void setPromoName(String promoName) {
PromoName = promoName;
}
public String getCategory() {
return Category;
}
public void setCategory(String category) {
Category = category;
}
public String getPromoImg() {
return PromoImg;
}
public void setPromoImg(String promoImg) {
PromoImg = promoImg;
}
public String getPromoDetails() {
return promoDetails;
}
public void setPromoDetails(String promoDetails) {
this.promoDetails = promoDetails;
}
public String getPromoValidty() {
return promoValidty;
}
public void setPromoValidty(String promoValidty) {
this.promoValidty = promoValidty;
}}
Api Interface api接口
public interface ApiInterface {
@POST("ap/promotions.php")
Call<List<PromoDetails>> getPromotions();}
MainActivity 主要活动
public class MainActivity extends AppCompatActivity {
private ApiInterface apiInterface;
private List<PromoDetails> promoDetails;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getPromotionUpdate();
}
private void getPromotionUpdate() {
apiInterface = ApiClient.getApiClient().create(ApiInterface.class);
Call<List<PromoDetails>> call = apiInterface.getPromotions();
call.enqueue(new Callback<List<PromoDetails>>() {
@Override
public void onResponse(Call<List<PromoDetails>> call, Response<List<PromoDetails>> response) {
promoDetails = response.body();
runOnUiThread(new Runnable() {
@Override
public void run() {
TextView prDescription = (TextView)findViewById(R.id.TextView1) ;
prDescription.setText(promoDetails.get(0).getPromoId());
}
});
}
@Override
public void onFailure(Call<List<PromoDetails>> call, Throwable t) {
}
});
}}
My web service like this 我的网络服务是这样的
[{"promoId":"7","companyName":"Pizza Hut","pName":"Connecting Dots TEDXCOLOMBO 2017","category":"EVENTS","pImg":"https:\/\/androidsra.000webhostapp.com\/img_ap\/tedx.png"},{"promoId":"6","companyName":"Subway","pName":"BUY any SUB & get another SUB FREE!","category":"FOODS & DRINKS","pImg":"https:\/\/androidsra.000webhostapp.com\/img_ap\/subway.png"},{"promoId":"5","companyName":"KFC ","pName":"40% off at Queens Hotel - Kandy for HSBC Credit cards.","category":"BANKS & CARDS","pImg":"https:\/\/androidsra.000webhostapp.com\/img_ap\/queens.png"},{"promoId":"4","companyName":"Pizza Hut","pName":"New sets of Furniture with special discounts.","category":"HOME & KITCHEN","pImg":"https:\/\/androidsra.000webhostapp.com\/img_ap\/singerfur_promo.png"},{"promoId":"3","companyName":"Browns Tours","pName":"Exclusive Offer !! Fly to Melbourne with Srilankan Airlines from Browns Tours","category":"TRAVEL","pImg":"https:\/\/androidsra.000webhostapp.com\/img_ap\/melbourne_promo.png"},{"promoId":"2","companyName":"KFC ","pName":"Hot Drumlets with 2L Pepsi for just Rs.1100\/- only","category":"FOODS & DRINKS","pImg":"https:\/\/androidsra.000webhostapp.com\/img_ap\/kfc_promo.png"},{"promoId":"1","companyName":"Pizza Hut","pName":"50% Off for Medium Pizzas.","category":"FOODS & DRINKS","pImg":"https:\/\/androidsra.000webhostapp.com\/img_ap\/pizza_promo.png"}]
I think it's because your pojo class variables doesn't match with your response variables. 我认为这是因为pojo类变量与响应变量不匹配。 Either use @SerializedName annotation or basically change your pojo definitions as exactly as in your response.
使用@SerializedName批注或基本上按照响应中的方式更改pojo定义。 For example:
例如:
@SerializedName("promoId")
private String PromoId;
@SerializedName("pName")
private String PromoName;
or 要么
private String promoId;
private String pName;
As you are not passing any data to getPromotions i presume its a get Method.
由于您没有将任何数据传递给getPromotions,因此我假定它为get方法。 make following changes in code
在代码中进行以下更改
public interface ApiInterface {
change --------> @GET("ap/promotions.php")
Call<List<PromoDetails>> getPromotions();}
and change your pojo class to following 并将您的pojo班级改为
public class Example {
@SerializedName("promoId")
@Expose
private String promoId;
@SerializedName("companyName")
@Expose
private String companyName;
@SerializedName("pName")
@Expose
private String pName;
@SerializedName("category")
@Expose
private String category;
@SerializedName("pImg")
@Expose
private String pImg;
public String getPromoId() {
return promoId;
}
public void setPromoId(String promoId) {
this.promoId = promoId;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public String getPName() {
return pName;
}
public void setPName(String pName) {
this.pName = pName;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getPImg() {
return pImg;
}
public void setPImg(String pImg) {
this.pImg = pImg;
}
}
why your post method don't have any passing parameters??? 为什么您的post方法没有任何传递参数?
Check method, is it GET or POST ? 检查方法,是GET还是POST ?
If it is GET, then change it to @GET("ap/promotions.php")
, other code will be same. 如果是GET,则将其更改为
@GET("ap/promotions.php")
,其他代码将相同。
在获取主体之前检查response.isSuccessful(),如果为假,请获取response.errorBody(),这将向您显示错误原因
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.