Volley StringRequest 结果为空错误

如何解决Volley StringRequest 结果为空错误

我最近想创建一个程序来定位和显示新闻来源。我所做的是使用一个名为 news api 的 api,我使用 android volley 模块执行字符串请求,但是当我尝试运行该应用程序时,它在我在 Response.ErrorListener() 中设置的 toast 上给了我一个错误。我还验证了我的 api 密钥,没有任何问题。感谢所有未来的帮助。 代码如下:

MainActivity.java:
private void loadSources() {
        sourcesLists = new ArrayList<>();
        sourcesLists.clear();

        progressBar.setVisibility(View.VISIBLE);

        String url = "https://newsapi.org/v2/sources?apiKey=" + Constants.API_KEY;

        StringRequest stringRequest = new StringRequest(Request.Method.GET,url,new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {
                    JSONObject jsonObject = new JSONObject(response);
                    JSONArray jsonArray = jsonObject.getJSONArray("sources");

                    for (int i=0; i<jsonArray.length(); i++) {
                        JSONObject jsonObject1 = jsonArray.getJSONObject(i);

                        String id = jsonObject1.getString("id");
                        String name = jsonObject1.getString("name");
                        String description = jsonObject1.getString("description");
                        String url = jsonObject1.getString("url");
                        String country = jsonObject1.getString("country");
                        String category = jsonObject1.getString("category");
                        String language = jsonObject1.getString("language");

                        SourcesListModel sourcesListModel = new SourcesListModel(
                            ""+id,""+name,""+description,""+url,""+category,""+language,""+country
                        );
                        sourcesLists.add(sourcesListModel);
                    }
                    sourceslistadapter = new Sourceslistadapter(MainActivity.this,sourcesLists);

                    sourcesRecyclerView.setAdapter(sourceslistadapter);
                }
                catch (Exception e) {
                    progressBar.setVisibility(View.GONE);
                    Toast.makeText(MainActivity.this,""+e.getMessage(),Toast.LENGTH_SHORT).show();
                }
            }
        },new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                progressBar.setVisibility(View.GONE);
                Toast.makeText(MainActivity.this,""+error.getMessage(),Toast.LENGTH_SHORT).show();
            }
        });

        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
}
My Adapter:
public class Sourceslistadapter extends RecyclerView.Adapter<Sourceslistadapter.sourcesListHolder> {

    private Context context;
    private ArrayList<SourcesListModel> sourcesLists;

    public Sourceslistadapter(Context context,ArrayList<SourcesListModel> sourcesLists) {
        this.context = context;
        this.sourcesLists = sourcesLists;
    }

    @NonNull
    @Override
    public SourcesListHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.row_source_list,parent,false);
        return new SourcesListHolder(view);
    }

    @SuppressLint("SetTextI18n")
    @Override
    public void onBindViewHolder(@NonNull Sourceslistadapter.sourcesListHolder holder,int position) {
        SourcesListModel model = sourcesLists.get(position);
        String id = model.getId();
        String name = model.getName();
        String description = model.getDescription();
        String country = model.getCountry();
        String category = model.getCategory();
        String language = model.getLanguage();

        holder.nameTextView.setText(name);
        holder.descriptionTextView.setText(description);
        holder.countryTextView.setText(context.getString(R.string.country_text)+ country);
        holder.categoryTextView.setText(context.getString(R.string.category_text)+ category);
        holder.languageTextView.setText(context.getString(R.string.language_text)+ language);

        holder.itemView.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
    }

    @Override
    public int getItemCount() {
        return sourcesLists.size();
    }

    class SourcesListHolder extends RecyclerView.ViewHolder{

        TextView nameTextView,descriptionTextView,countryTextView,categoryTextView,languageTextView;

        public SourcesListHolder(@NonNull View itemView) {
            super(itemView);

            nameTextView = itemView.findViewById(R.id.nameTextView);
            descriptionTextView = itemView.findViewById(R.id.descriptionTextView);
            countryTextView = itemView.findViewById(R.id.countryTextView);
            categoryTextView = itemView.findViewById(R.id.categoryTextView);
            languageTextView = itemView.findViewById(R.id.languageTextView);
        }
    }
}
My Model:
public class SourcesListModel {

    String id,name,description,category,language,country;

    public SourcesListModel(String id,String name,String description,String url,String category,String language,String country) {
        this.id = id;
        this.name = name;
        this.description = description;
        this.url = url;
        this.category = category;
        this.language = language;
        this.country = country;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String id) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    public String getLanguage() {
        return language;
    }

    public void setLanguage(String language) {
        this.language = language;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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元字符(。)和普通点?