如何解决新闻App RecyclerView不显示从API提取的数据
我一直在尝试构建此新闻应用程序,该应用程序使用来自newsapi.org的流行新闻API。我有一个问题,我介于两者之间。我面临的问题是我的应用程序没有显示从API提取到recyclerView的任何数据
在同一情况下,如果我尝试通过形成一些虚拟数组来显示数据,则recyclerview可以正常工作。
这是我的MainActivity.java文件
public class MainActivity extends AppCompatActivity implements RecyclerViewClickInterface{
private RequestQueue mRequestQueue;
private ArrayList<NewsData> mNewsArray = new ArrayList<>();
private JSONArray newsJsonArray;
//private JSONObject mSingleJsonObject;
private NewsAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView listofItems = (RecyclerView) findViewById(R.id.recyclerViewList);
listofItems.setLayoutManager(new linearlayoutmanager(this));
mRequestQueue = VolleySingleton.getInstance(this).getRequestQueue();
mAdapter = new NewsAdapter(this);
fetchData();
listofItems.setAdapter(mAdapter);
}
public void fetchData(){
String url = "https://newsapi.org/v2/top-headlines?country=in&apiKey=240f35xxxxx12bb70xxxxxx";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET,url,null,new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
newsJsonArray = response.getJSONArray("article");
} catch (JSONException e) {
e.printstacktrace();
}
for(int i=0;i<newsJsonArray.length();i++){
try {
JSONObject mSingleJsonObject = newsJsonArray.getJSONObject(i);
NewsData mSingleNewsData = new NewsData(
mSingleJsonObject.getString("title"),mSingleJsonObject.getString("author"),mSingleJsonObject.getString("url"),mSingleJsonObject.getString("urlToImage")
);
mNewsArray.add(mSingleNewsData);
} catch (JSONException e) {
e.printstacktrace();
}
} //for loop
mAdapter.updateNews(mNewsArray);
}
},new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printstacktrace();
}
});
VolleySingleton.getInstance(this).addToRequestQueue(jsonObjectRequest);
}
@Override
public void onItemClicked(int position) {
//Toast.makeText(this,(CharSequence) data.get(position),Toast.LENGTH_SHORT).show();
}
}
尽管原始URL可以正常工作,但我已将URL中的密钥隐藏了。
CustomAdapter:-
public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.NewsViewHolder>{
//private ArrayList<String> temp = new ArrayList<>();
private ArrayList<NewsData> itemsData = new ArrayList<>();
private RecyclerViewClickInterface recyclerViewClickInterface;
public NewsAdapter(RecyclerViewClickInterface recyclerViewClickInterface){
this.recyclerViewClickInterface = recyclerViewClickInterface;
}
public class NewsViewHolder extends RecyclerView.ViewHolder{
TextView textView;
public NewsViewHolder(@NonNull View itemView) {
super(itemView);
textView = (TextView) itemView.findViewById(R.id.textItem);
itemView.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
recyclerViewClickInterface.onItemClicked(getAdapterPosition());
}
});
}
}
@NonNull
@Override
public NewsViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.list_item,parent,false);
return new NewsViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull NewsViewHolder holder,int position) {
NewsData displayText = (NewsData) itemsData.get(position);
holder.textView.setText(displayText.getTitle());
}
@Override
public int getItemCount() {
return itemsData.size();
//return temp.size();
}
public void updateNews(ArrayList<NewsData> updatednews){
itemsData.clear();
itemsData.addAll(updatednews);
notifyDataSetChanged();
}
除了我有NewsData.java文件外,它是基本数据类 其次,我有一个RecyclerViewClickInterface,它只有一个onClicked抽象方法,在给定的问题中没有什么意义。
Logcat
2020-11-09 01:09:57.206 13597-13645/com.example.newsapplication E/Volley: [2204] BasicNetwork.performRequest: Unexpected response code 403 for https://newsapi.org/v2/top-headlines?country=in&apiKey=240xxxxxx61xxxxf0e8fbf
2020-11-09 01:09:57.932 13597-13645/com.example.newsapplication E/Volley: [2204] BasicNetwork.performRequest: Unexpected response code 403 for https://newsapi.org/v2/top-headlines?country=in&apiKey=240xxxxxx61xxxxf0e8fbf
请帮助我:)
清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.newsapplication">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。