Java recyclerView.setAdapter(适配器);不起作用

Java recyclerView.setAdapter(适配器);不起作用,java,android,android-recyclerview,adapter,Java,Android,Android Recyclerview,Adapter,当我尝试运行android应用程序时,它会说“不幸的是,应用程序已经停止”。我发现在recyclerView.setAdapter(adapter)之前一切都很好行(专用)。我读过相关文章,但找不到任何解决方案。这里是MainActivity.java package com.newsapp; import android.content.Context; import android.graphics.drawable.Drawable; import android.view.Layout

当我尝试运行android应用程序时,它会说“不幸的是,应用程序已经停止”。我发现在
recyclerView.setAdapter(adapter)之前一切都很好行(专用)。我读过相关文章,但找不到任何解决方案。这里是
MainActivity.java

package com.newsapp;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target;
import com.newsapp.models.Article;
import java.util.List;


public class Adapter extends RecyclerView.Adapter<Adapter.MyViewHolder> {

    private List<Article> articles;
    private Context context;
    private OnItemClickListener onItemClickListener;


    public Adapter(List<Article> articles, Context context) {
        this.articles = articles;
        this.context = context;
    }

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

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holders, int position) {
        final MyViewHolder holder = holders;
        Article models = articles.get(position);

        RequestOptions requestOptions = new RequestOptions();
        requestOptions.placeholder(Utils.getRandomDrawbleColor());
        requestOptions.error(Utils.getRandomDrawbleColor());
        requestOptions.diskCacheStrategy(DiskCacheStrategy.ALL);
        requestOptions.centerCrop();

        Glide.with(context)
                .load(models.getUrlToImage())
                .apply(requestOptions)
                .listener(new RequestListener<Drawable>() {
                    @Override
                    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                        holder.progressBar.setVisibility(View.GONE);
                        return false;
                    }

                    @Override
                    public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                        holder.progressBar.setVisibility(View.GONE);
                        return false;
                    }
                })
                .transition(DrawableTransitionOptions.withCrossFade())
                .into(holder.imageView);

        holder.title.setText(models.getTitle());
        holder.desc.setText(models.getDescription());
        holder.source.setText(models.getSource().getName());
        holder.time.setText(" \u2022 "+ Utils.DateToTimeFormat(models.getPublishedAt()));
        holder.published_ad.setText(Utils.DateFormat(models.getPublishedAt()));
        holder.author.setText(models.getAuthor());
    }

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

    public void setOnItemClickListener (OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }

    public interface OnItemClickListener {
        void onItemClick(View view, int position);
    }

    public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        TextView title, desc, author, published_ad, source, time;
        ImageView imageView;
        ProgressBar progressBar;
        OnItemClickListener onItemClickListener;

        public MyViewHolder(@NonNull View itemView, OnItemClickListener onItemClickListener) {
            super(itemView);

            itemView.setOnClickListener(this);
            title = itemView.findViewById(R.id.title);
            desc = itemView.findViewById(R.id.desc);
            author = itemView.findViewById(R.id.author);
            published_ad = itemView.findViewById(R.id.publishedAt);
            source = itemView.findViewById(R.id.source);
            time = itemView.findViewById(R.id.time);
            imageView = itemView.findViewById(R.id.img);
            progressBar = itemView.findViewById(R.id.progress_load_photo);

            this.onItemClickListener = onItemClickListener;
        }

        @Override
        public void onClick(View v) {
            onItemClickListener.onItemClick(v, getAdapterPosition());
        }
    }
}
package.com.newsapp;
导入android.os.Bundle;
导入android.widget.Toast;
导入androidx.appcompat.app.appcompat活动;
导入androidx.recyclerview.widget.DefaultItemAnimator;
导入androidx.recyclerview.widget.LinearLayoutManager;
导入androidx.recyclerview.widget.recyclerview;
导入com.newsapp.api.ApiClient;
导入com.newsapp.api.api接口;
导入com.newsapp.models.Article;
导入com.newsapp.models.News;
导入java.util.ArrayList;
导入java.util.List;
2.电话;;
2.回拨;
2.回应;;
公共类MainActivity扩展了AppCompatActivity{
公共静态最终字符串API_KEY=“ab6fad4399e24822a35c189dcde2eaa1”;
私人回收站;
private RecyclerView.LayoutManager LayoutManager;
private List articles=new ArrayList();
专用适配器;
私有字符串标记=MainActivity.class.getSimpleName();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView=findViewById(R.id.recyclerView);
layoutManager=新的LinearLayoutManager(MainActivity.this);
recyclerView.setLayoutManager(layoutManager);
setItemAnimator(新的DefaultItemAnimator());
recyclerView.setNestedScrollingEnabled(false);
LoadJson();
}
公共void LoadJson(){
ApiInterface ApiInterface=ApiClient.getApiClient().create(ApiInterface.class);
字符串country=Utils.getCountry();
呼叫呼叫;
call=apinterface.getNews(国家,API_键);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.issusccessful()&&response.body().getArticle()!=null){
如果(!articles.isEmpty()){
条款。清晰();
}
articles=response.body().getArticle();
adapter=新适配器(文章,MainActivity.this);
recyclerView.setAdapter(适配器);
adapter.notifyDataSetChanged();
}否则{
Toast.makeText(MainActivity.this,“无结果!”,Toast.LENGTH_SHORT.show();
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
}
});
}
}
这里
Adapter.java

package com.newsapp;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target;
import com.newsapp.models.Article;
import java.util.List;


public class Adapter extends RecyclerView.Adapter<Adapter.MyViewHolder> {

    private List<Article> articles;
    private Context context;
    private OnItemClickListener onItemClickListener;


    public Adapter(List<Article> articles, Context context) {
        this.articles = articles;
        this.context = context;
    }

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

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holders, int position) {
        final MyViewHolder holder = holders;
        Article models = articles.get(position);

        RequestOptions requestOptions = new RequestOptions();
        requestOptions.placeholder(Utils.getRandomDrawbleColor());
        requestOptions.error(Utils.getRandomDrawbleColor());
        requestOptions.diskCacheStrategy(DiskCacheStrategy.ALL);
        requestOptions.centerCrop();

        Glide.with(context)
                .load(models.getUrlToImage())
                .apply(requestOptions)
                .listener(new RequestListener<Drawable>() {
                    @Override
                    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                        holder.progressBar.setVisibility(View.GONE);
                        return false;
                    }

                    @Override
                    public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                        holder.progressBar.setVisibility(View.GONE);
                        return false;
                    }
                })
                .transition(DrawableTransitionOptions.withCrossFade())
                .into(holder.imageView);

        holder.title.setText(models.getTitle());
        holder.desc.setText(models.getDescription());
        holder.source.setText(models.getSource().getName());
        holder.time.setText(" \u2022 "+ Utils.DateToTimeFormat(models.getPublishedAt()));
        holder.published_ad.setText(Utils.DateFormat(models.getPublishedAt()));
        holder.author.setText(models.getAuthor());
    }

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

    public void setOnItemClickListener (OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }

    public interface OnItemClickListener {
        void onItemClick(View view, int position);
    }

    public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        TextView title, desc, author, published_ad, source, time;
        ImageView imageView;
        ProgressBar progressBar;
        OnItemClickListener onItemClickListener;

        public MyViewHolder(@NonNull View itemView, OnItemClickListener onItemClickListener) {
            super(itemView);

            itemView.setOnClickListener(this);
            title = itemView.findViewById(R.id.title);
            desc = itemView.findViewById(R.id.desc);
            author = itemView.findViewById(R.id.author);
            published_ad = itemView.findViewById(R.id.publishedAt);
            source = itemView.findViewById(R.id.source);
            time = itemView.findViewById(R.id.time);
            imageView = itemView.findViewById(R.id.img);
            progressBar = itemView.findViewById(R.id.progress_load_photo);

            this.onItemClickListener = onItemClickListener;
        }

        @Override
        public void onClick(View v) {
            onItemClickListener.onItemClick(v, getAdapterPosition());
        }
    }
}
package.com.newsapp;
导入android.content.Context;
导入android.graphics.drawable.drawable;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ImageView;
导入android.widget.ProgressBar;
导入android.widget.TextView;
导入androidx.annotation.NonNull;
导入androidx.annotation.Nullable;
导入androidx.recyclerview.widget.recyclerview;
导入com.bumptech.glide.glide;
导入com.bumptech.glide.load.DataSource;
导入com.bumptech.glide.load.engine.DiskCacheStrategy;
导入com.bumptech.glide.load.engine.GlideException;
导入com.bumptech.glide.load.resource.drawable.drawable转换选项;
导入com.bumptech.glide.request.RequestListener;
导入com.bumptech.glide.request.RequestOptions;
导入com.bumptech.glide.request.target.target;
导入com.newsapp.models.Article;
导入java.util.List;
公共类适配器扩展了RecyclerView.Adapter{
私人物品清单;
私人语境;
私有OnItemClickListener OnItemClickListener;
公共适配器(列表项目、上下文){
这个.文章=文章;
this.context=上下文;
}
@非空
@凌驾
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
视图=LayoutFlater.from(上下文)。充气(R.layout.item,父项,false);
返回新的MyViewHolder(视图、监听器);
}
@凌驾
public void onBindViewHolder(@NonNull MyViewHolder holders,int位置){
最终MyViewHolder=持有人;
文章模型=文章.get(位置);
RequestOptions RequestOptions=newrequestoptions();
占位符(Utils.getRandomDrawbleColor());
错误(Utils.getRandomDrawbleColor());
requestOptions.diskCacheStrategy(diskCacheStrategy.ALL);
requestOptions.centerCrop();
带(上下文)滑动
.load(models.getUrlToImage())
.apply(请求选项)
.listener(新的RequestListener(){
@凌驾
public boolean onload失败(@Nullable glide,对象模型,目标,boolean isFirstResource){
holder.progressBar.setVisibility(View.GONE);
返回false;
}
@凌驾
公共布尔onResourceReady(可绘制资源、对象模型、目标、数据源数据源、布尔isFirstResource){
holder.progressBar.setVisibility(View.GONE);
返回false;
}
})
.transition(DrawableTransitionOptions.withCrossFade())
.插入(支架.图像视图);
holder.title.setText(models.getTitle());
holder.desc.setText(models.getDescription());
holder.source.setText(models.getSource().getName());
holder.time.setText(“\u2022”+Utils.DateToTimeFormat(models.getPublishedAt());
holder.published_ad.setText(Utils.DateFormat)(型号