新闻App RecyclerView不显示从API提取的数据

如何解决新闻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

请帮助我:)

This is how App responds to given code

清单文件

<?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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?