【发布时间】:2018-09-25 07:07:06
【问题描述】:
我正在尝试解析来自 newsapi.org 的 JSON 数据。这是我试图在 recyclerview 中显示的示例 json
"articles":[
{
"source":{
"id":"fox-news",
"name":"Fox News"
},
"author":null,
"title":"After the hurricane comes the deluge on South Carolina coast",
"description":"Eleven days ago, Lee Gantt was at a Hurricane Florence party in her neighborhood in Georgetown, where the story goes that some houses haven't flooded from the Sampit River since they were built before the American Revolution.",
"url":"http://www.foxnews.com/us/2018/09/25/after-hurricane-comes-deluge-on-south-carolina-coast.html",
"urlToImage":null,
"publishedAt":"2018-09-25T04:20:37Z",
"content":"GEORGETOWN, S.C. – Eleven days ago, Lee Gantt was at a Hurricane Florence party in her neighborhood in Georgetown, where the story goes that some houses haven't flooded from the Sampit River since they were built before the American Revolution. She will spend… [+4401 chars]"
}
我尝试过的代码。我无法在 Recyclerview 中显示所需的内容。该应用程序因致命异常而崩溃。 logcat 将错误指向 Adapter 类中的 onBindViewHolder。
在MainActivity中的else语句中如果我改成return; recyclerview 什么也没显示
MainActivity.java
JSONObject jsonObject = new JSONObject(sResponse);
JSONArray jsonArray = jsonObject.getJSONArray("articles");
for (int k = 0; k < jsonArray.length(); k++) {
JSONObject jsonObject1 = jsonArray.getJSONObject(k);
HeadlinesListItem listItem = new HeadlinesListItem();
listItem.setsTitle(jsonObject1.getString("title"));
if (!jsonObject1.isNull("urlToImage")) {
listItem.setsUrlToImage(jsonObject1.getString("urlToImage"));
} else {
listItem.setsUrlToImage(null);
}
mNewsList.add(listItem);
Adapter.java
private Context context;
private List<HeadlinesListItem> mNewsItems;
private MyAdapterListener myAdapterListener;
private LayoutInflater mLayoutInflator;
TopHeadlinesAdapter(Context context, List<HeadlinesListItem> mNewsItems, MyAdapterListener clickListener) {
this.context = context;
this.mNewsItems = mNewsItems;
mLayoutInflator = LayoutInflater.from(context);
myAdapterListener = clickListener;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.top_headlines_adapter, viewGroup, false);
return new CustomViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
CustomViewHolder myHolder = (CustomViewHolder) viewHolder;
HeadlinesListItem listItems = mNewsItems.get(i);
myHolder.lblHedLine.setText(listItems.getsTitle());
if (listItems.getsUrlToImage().isEmpty()) {
Glide.with(context).load(R.drawable.noimage).into(myHolder.imgImage);
}else{
Glide.with(context).load(listItems.getsUrlToImage()).apply(new RequestOptions().placeholder(R.drawable.noimage)).into(myHolder.imgImage);
}
}
@Override
public int getItemCount() {
return mNewsItems.size();
}
Logcat
09-25 12:16:25.867 28309-28309/com.example.rahul.newsapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.rahul.newsapp, PID: 28309
android.content.res.Resources$NotFoundException: Resource ID #0x7f07006c
at android.content.res.Resources.getValue(Resources.java:2345)
at android.content.res.Resources.getDrawable(Resources.java:1850)
at android.support.v4.content.res.ResourcesCompat.getDrawable(ResourcesCompat.java:82)
at com.bumptech.glide.load.resource.drawable.DrawableDecoderCompat.loadDrawableV4(DrawableDecoderCompat.java:76)
at com.bumptech.glide.load.resource.drawable.DrawableDecoderCompat.getDrawable(DrawableDecoderCompat.java:64)
at com.bumptech.glide.load.resource.drawable.DrawableDecoderCompat.getDrawable(DrawableDecoderCompat.java:41)
at com.bumptech.glide.request.SingleRequest.loadDrawable(SingleRequest.java:388)
at com.bumptech.glide.request.SingleRequest.getPlaceholderDrawable(SingleRequest.java:369)
at com.bumptech.glide.request.SingleRequest.begin(SingleRequest.java:262)
at com.bumptech.glide.manager.RequestTracker.runRequest(RequestTracker.java:44)
at com.bumptech.glide.RequestManager.track(RequestManager.java:614)
at com.bumptech.glide.RequestBuilder.into(RequestBuilder.java:646)
at com.bumptech.glide.RequestBuilder.into(RequestBuilder.java:706)
at com.example.rahul.newsapp.TopHeadlinesAdapter.onBindViewHolder(TopHeadlinesAdapter.java:48)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6781)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6823)
at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5752)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6019)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924)
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:3336)
at android.view.View.measure(View.java:18557)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5827)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1435)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:721)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:612)
at android.view.View.measure(View.java:18557)
at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:2017)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.widget.ScrollView.onMeasure(ScrollView.java:487)
at android.view.View.measure(View.java:18557)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5827)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)
at android.view.View.measure(View.java:18557)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5827)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1435)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:721)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:612)
at android.view.View.measure(View.java:18557)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5827)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:18557)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5827)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1435)
at android.widget.LinearLayout.
【问题讨论】:
-
什么是异常?发布日志。
-
请发布你的日志
-
出于测试目的尝试加载任何其他图像,如 ic_launcher 或其他任何图像。
-
对于某些 imgUrl json 对象,该值为 null。这是错误的主要原因。
-
@rahulramakrishnan 答案是否有效?
标签: android json android-recyclerview