【发布时间】:2018-01-30 14:01:53
【问题描述】:
我正在尝试从 Rest Api 获取 json 数据,对其进行反序列化并将其显示给 RecyclerView。
我正在使用改造 1.9。在 JSONArray(s) 中,我可以在 logcat 中看到数据 api。
我可以反序列化 json 数组之外的数据,如正文、标题等。
但是在 json 中有一些图像作为数组。我为 appimage 和 testImage 创建了两个静态内部类。
AppImage 有 3 或 4 个图像。测试图像只有一个图像源。
起初我想获取 TeaserimageSample 将其设置为 RecyclerView 标题图像。
我正在尝试从中获取 src 值。但不知道该怎么做。
我还想知道我的模型类是否基于给定的 JSON 是正确的。我在代码里面已经详细解释过了。
编辑的控制器类
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" ) );
ArrayList<NewsModel.AppImage> list = new ArrayList();
JSONArray imageArray =object.getJSONArray("appImages");
for(int j=0; j<imageArray.length();j++){
NewsModel.AppImage appImages = new NewsModel.AppImage();
appImages.setSrc(imageArray.getJSONObject( j ).getString( "src" ));
list.add(appImages);
}
news.setAppImages( list );
JSONObject jo=object.getJSONObject( "teaserImageSmall" );
NewsModel.TeaserImageSmall coverImage=new NewsModel.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();
}
}
我已编辑的适配器类我在其中设置 Picasso 以设置封面图像的图像。但我仍然在 recyclerview 中什么也看不到
...............
// create new views (invoked by the layout manager)
@Override
public NewsHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.news_row_layout,parent,false);
return new NewsHolder(view);
}
@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.newsImage.setImageResource( R.drawable.image1 );
holder.newsHeadline.setText(currentNews.getTitle());
holder.newsDate.setText(currentNews.getPostDate());
}
@Override
public int getItemCount() {
return mNews.size();
}
public class NewsHolder extends RecyclerView.ViewHolder {
public CardView cardView;
public ImageView newsImage;
public TextView newsHeadline;
public TextView newsDate;
public NewsHolder(View itemView) {
super(itemView);
newsImage=(ImageView)itemView.findViewById(R.id.news_picture);
newsHeadline=(TextView)itemView.findViewById(R.id.news_headline);
newsDate=(TextView) itemView.findViewById(R.id.news_date);
cardView=(CardView)itemView.findViewById(R.id.cardview_news);
}
}
}
【问题讨论】:
-
@Benjamin 我在我的问题中给出了 api mager
-
你能发布API链接吗?我的意思是你从哪里得到这个 json 响应?
-
我认为您无权查看它。 app.blu-pa.com/api/news.. 但是json数据是这样的
-
因为我在 logcat 中看不到所有数据。我还可以在 recyclerview 中看到正文、文本、更新日期。但我此时遇到了图像问题
-
好的,我正在尝试这个
标签: java android json deserialization picasso