2017-09-13 13 views
0

Je souhaite récupérer les données d'un service Web en vue texte. Le service Web fonctionne bien. J'utilise le retrofit pour le réseau. Mais je deviens null dans prmoDetails ici response.body. J'ai vérifié et essayé toutes les solutions passées. Mais ça ne marche toujours pas. Aidez-moi s'il vous plaît à résoudre ceci.Rénovation 2 - le corps de la réponse donne une valeur nulle

POJO classe

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; 
}} 

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

     } 
    }); 


}} 

Mon service Web comme celui-ci

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

Répondre

1

Comme vous ne transmettez aucune donnée à getPromotions, je suppose que c'est une méthode get. apporter des modifications suivantes dans le code

public interface ApiInterface { 

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

et changer votre classe POJO à suivre

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

Oui. Je l'ai changé. Mais même question – venura

+0

@venura s'il vous plaît vérifier la réponse mise à jour –

+0

Merci beaucoup. Pouvez-vous s'il vous plaît m'aider avec ça? https://stackoverflow.com/questions/46177484/how-to-retrieve-web-service-values-through-retrofit-to-text-view?noredirect=1#comment79320108_46177484 – venura

0

pourquoi votre méthode post n'a aucun paramètre de passage ???

La méthode de vérification est-elle GET ou POST?

Si c'est GET, alors changez-le en @GET("ap/promotions.php"), l'autre code sera le même.

+0

Oui. Je l'ai changé. Mais même problème. – venura

2

Je pense qu'il est parce que vos variables de classe POJO ne correspond pas à vos variables de réponse. Utilisez l'annotation @SerializedName ou modifiez fondamentalement vos définitions de pojo exactement comme dans votre réponse. Par exemple:

@SerializedName("promoId") 
private String PromoId; 

@SerializedName("pName") 
private String PromoName; 

ou

private String promoId; 
private String pName; 
0

check response.isSuccessful() avant d'obtenir le corps, si elle est fausse get response.errorBody() et qui va vous montrer la cause de l'erreur