2017-09-13 59 views
0

我想從Web服務檢索到textview的數據。 Web服務運行良好。我正在使用網絡改造。但是我在prmoDetails這裏response.body中得到null。我也檢查並嘗試了所有以前的解決方案。但仍然無法正常工作。請幫我解決這個問題。改造2 - 響應正文給出空值

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接口

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) { 

     } 
    }); 


}} 

這樣我的web服務

[{"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"}] 

回答

1

因爲您沒有傳遞任何數據給getPromotions,我認爲它是一個get方法。做以下修改代碼

public interface ApiInterface { 

    change --------> @GET("ap/promotions.php") 
    Call<List<PromoDetails>> getPromotions();} 

,改變你的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; 
} 

} 
+0

是的。我改變了它。但同樣的問題 – venura

+0

@venura請檢查更新的答案 –

+0

非常感謝。你能幫我解決這個問題嗎? https://stackoverflow.com/questions/46177484/how-to-retrieve-web-service-values-through-retrofit-to-text-view?noredirect=1#comment79320108_46177484 – venura

0

爲什麼你的post方法沒有任何傳遞參數?

檢查方法,是否GETPOST

如果是GET, 則將其更改爲@GET("ap/promotions.php"),其他代碼將相同。

+0

是的。我改變了它。但同樣的問題。 – venura

2

我想這是因爲你的POJO類變量不會與你的反應變量相匹配。要麼使用@SerializedName註釋,要麼基本上改變POJO的定義,就像在你的迴應中一樣。例如:

@SerializedName("promoId") 
private String PromoId; 

@SerializedName("pName") 
private String PromoName; 

private String promoId; 
private String pName; 
0

檢查response.isSuccessful()獲取身體,之前如果是假的GET response.errorBody(),並會告訴你錯誤

的原因