2017-09-13 4 views
0

Ich möchte Daten von einem Web-Service zu Textview abrufen. Web-Service funktioniert gut. Ich benutze Retrofit für das Netzwerk. Aber ich bekomme null in prmoDetails hier response.body. Ich habe alle bisherigen Lösungen überprüft und ausprobiert. Aber es funktioniert immer noch nicht. Bitte hilf mir, das zu lösen.Nachrüstung 2 - Response Body gibt Nullwert

POJO Klasse

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 Schnittstelle

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

     } 
    }); 


}} 

Meine Web-Service wie folgt

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

Antwort

1

Da Sie keine Daten an getPromotions übergeben, nehme ich an, dass es sich um eine get-Methode handelt. macht folgende Änderungen im Code

public interface ApiInterface { 

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

und Ihre pojo Klasse ändern, um folgenden

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

Ja. Ich habe es geändert. Aber das gleiche Problem – venura

+0

@venura überprüfen Sie bitte aktualisierte Antwort –

+0

Vielen Dank. Kannst du mir bitte dabei helfen? https://stackoverflow.com/questions/46177484/how-to-retrieve-web-service-values-through-retrofit-to-text-view?noredirect=1#comment79320108_46177484 – venura

0

Warum hat Ihre Post-Methode keine Parameter?

Überprüfen Sie die Methode, ist es GET oder POST?

Wenn es GET ist, dann ändern Sie es zu @GET("ap/promotions.php"), anderer Code wird gleich sein.

+0

Ja. Ich habe es geändert. Aber das gleiche Problem. – venura

2

Ich denke, es ist, weil Ihr pojo Klassenvariablen mit Ihren Antwortvariablen stimmt nicht überein. Verwenden Sie entweder @SerializedName Annotation oder ändern Sie Ihre Pojo-Definitionen so genau wie in Ihrer Antwort. Zum Beispiel:

@SerializedName("promoId") 
private String PromoId; 

@SerializedName("pName") 
private String PromoName; 

oder

private String promoId; 
private String pName; 
0

Scheck response.isSuccessful() vor dem Körper bekommen, wenn es falsch ist get response.errorBody() und dass Sie zeigt die Fehlerursache