我想从url获取json数据以在用户界面上显示它。但未能按正确的顺序反序列化数据。我使用Retrofit 1.9。问题是当我运行此代码时,没有任何图像反序列化功能,例如title,body,updateDate,那时它工作正常。我可以看到带有标题和日期的recyclerview。但是当我尝试使用以下代码运行时,recyclerview变得空白。我什么都看不到。我正在努力确定。什么都没有解决我的问题。如果有人帮我确定问题,对我来说真的很有帮助。
控制器类
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();
}
}
我的适配器类是
@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);
}
});
答案 0 :(得分:0)
appImages.setSrc(imageArray.optString(("src")));
不要在这里使用Integer.parseInt,因为你在src中有一个String数据。
将此列表添加到此图像数组的迭代外的NewsModel.appImages=list;
。
现在在Adapter类中,
holder.newsImage.appImage.get(position).getSrc();
希望这有效:)
答案 1 :(得分:0)
NewsModel.AppImages appImages = new NewsModel.AppImages();
appImages.setSrc(imageArray.optString(("src")));
不要在这里使用Integer.parseInt,因为你在src中有一个String数据。 将此列表添加到
NewsModel.appImages=list;
此图像数组的外部迭代。
JSONOBJECT Jo= object.getJsonObject("teaserImageSmall");
NewsModel.teaserImageSmall= Jo.optString("src");
现在在Adapter类中,
holder.newsImage.setImage(mNews.appImage.get(position).getSrc());
String cover= mNews.teaserImageSmall;
希望这有效:)