Je souhaite extraire les données json de l'URL pour les afficher dans l'interface utilisateur. Mais n'a pas réussi à désérialiser les données dans le bon ordre. J'utilise Retrofit 1.9. Le problème est quand je cours ce code avec n'importe quelle image désérialiser la fonctionnalité, par exemple le titre, le corps, updateDate cette fois-ci cela fonctionne bien. Je peux voir le recyclerview avec le cap et la date. mais quand j'essaye de courir avec le code de follwoing, le recyclerview se vide. Je ne vois rien à ce sujet. Je fais de mon mieux pour identifier. Bu rien ne pourrait résoudre mon problème. Ce serait vraiment utile pour moi si quelqu'un m'aide à identifier le problème.Récupérer le remplissage avec json
Le contrôleur classe
public class NewsController {
private static final String TAG = NewsController.class.getSimpleName();
private UserCallbackListener mListener;
private NewsRestApiManager mApiManager;
public NewsController(UserCallbackListener listener) {
mListener = listener;
mApiManager = new NewsRestApiManager();
}
public void startFetching(){
mApiManager.getNewsApi().getNews(new Callback<String>() {
@Override
public void success(String s, Response response) {
Log.d(TAG, "JSON :: " + s);
try {
JSONArray array = new JSONArray(s);
for(int i = 0; i < array.length(); i++) {
JSONObject object = array.getJSONObject(i);
NewsModel news = new NewsModel();
news.setTitle(object.optString("title"));
news.setBody(object.optString("body"));
/* if I comment downd this postion the app run perfectly but except image*/
ArrayList<AppImage> list = new ArrayList();
JSONArray imageArray =object.getJSONArray("appImages");
for(int j=0; j<imageArray.length();j++){
AppImage appImages = new AppImage();
appImages.setSrc(imageArray.getJSONObject(j).getString("src"));
list.add(appImages);
}
news.setAppImages(list);
// I want to set this image ad Heading Image
JSONObject jo=object.getJSONObject("teaserImageSmall");
TeaserImageSmall coverImage=new TeaserImageSmall();
coverImage.setSrc(jo.optString("src"));
news.setTeaserImageSmall(coverImage);
mListener.onFetchProgress(news);
}
} catch (JSONException e) {
mListener.onFetchFailed();
}
mListener.onFetchComplete();
}
@Override
public void failure(RetrofitError error) {
Log.d(TAG, "Error :: " + error.getMessage());
mListener.onFetchComplete();
}
});
}
public interface UserCallbackListener{
void onFetchStart();
void onFetchProgress(NewsModel news);
void onFetchProgress(List<NewsModel> userList);
void onFetchComplete();
void onFetchFailed();
}
}
Ma classe d'adaptateur est
@Override
public void onBindViewHolder(NewsHolder holder, int position) {
final NewsModel currentNews = mNews.get(position);
Picasso.with(holder.itemView.getContext());
Picasso.with(holder.itemView.getContext()).load(currentNews.getTeaserImageSmall().getSrc()).into(holder.newsImage);
holder.newsHeadline.setText(currentNews.getTitle());
holder.newsDate.setText(currentNews.getPostDate());
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i=new Intent(context,DetailNews.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//i.putExtra("image",newsModel.getImage());
i.putExtra("title",currentNews.getTitle());
i.putExtra("body",currentNews.getBody());
context.startActivity(i);
}
});
Comment puis-je obtenir source de –
TeaserImageSmall Je ne suis pas sûr de la implementtaion JSONARRAY jsonarray = object.optString (» appImages ") ;. Parce que je définis déjà le tableau json. Dois-je le faire deux fois? Pourriez-vous expliquer plus en fonction de mon code –
Bien sûr .. TeaserImageSmall n'est pas nécessaire. vous devez définir un autre tableau json parce que dans votre json "appImages" a une donnée de tableau json donc la réponse vous donnera un tableau que vous devez itérer. Vous pouvez vous référer à l'analyse des données json imbriquées qui vous aideront plus. – Ankit