Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的RSS解析器代码不断崩溃,我无法';我找不到问题所在_Java_Android - Fatal编程技术网

Java 我的RSS解析器代码不断崩溃,我无法';我找不到问题所在

Java 我的RSS解析器代码不断崩溃,我无法';我找不到问题所在,java,android,Java,Android,我试图在列表视图中获取并显示实时新闻,但它崩溃了 我看了一些教程和社区解决的问题,但我仍然无法在代码中找到问题。我在一个片段中工作,我使用的是MVC结构 public class HomeFragment extends Fragment { private MutableLiveData<List<Article>> articleListLive = null; private String urlString = "https://www.andro

我试图在列表视图中获取并显示实时新闻,但它崩溃了

我看了一些教程和社区解决的问题,但我仍然无法在代码中找到问题。我在一个片段中工作,我使用的是MVC结构

public class HomeFragment extends Fragment {
    private MutableLiveData<List<Article>> articleListLive = null;
    private String urlString = "https://www.androidauthority.com/feed";
    private RecyclerView mRecyclerView;
    private ArticleAdapter mAdapter;
    private ArrayList<Article> listArticle = new ArrayList<Article>();
    public HomeFragment() {
        // Required empty public constructor
    }
    public static HomeFragment newInstance () {
        return (new HomeFragment());
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_home, container, false);

        ListView listView = (ListView)rootView.findViewById(R.id.news_list);
        listView.setAdapter((ListAdapter) new ArticleAdapter(listArticle,getContext()));

        return rootView;
    }

    public void fetchFeed() {

        Parser parser = new Parser();
        parser.onFinish(new OnTaskCompleted() {


            @Override
            public void onTaskCompleted(List<Article> list) {
                setArticleList(list);
            }

            @Override
            public void onError(Exception e) {
                setArticleList(new ArrayList<Article>());
                e.printStackTrace();
                snackbar.postValue("An error has occurred. Please try again");
            }
        });
        parser.execute(urlString);
    }
    private MutableLiveData<String> snackbar = new MutableLiveData<>();

    public MutableLiveData<List<Article>> getArticleList() {
        if (articleListLive == null) {
            articleListLive = new MutableLiveData<>();
        }
        return articleListLive;
    }
    private void setArticleList(List<Article> articleList) {
        this.articleListLive.postValue(articleList);
    }


}
公共类HomeFragment扩展了片段{
private MutableLiveData articleListLive=null;
专用字符串urlString=”https://www.androidauthority.com/feed";
私人回收视图mRecyclerView;
私人公寓;
private ArrayList listArticle=新建ArrayList();
公共HomeFragment(){
//必需的空公共构造函数
}
公共静态HomeFragment newInstance(){
返回(新的HomeFragment());
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment\u home,container,false);
ListView ListView=(ListView)rootView.findViewById(R.id.news\u列表);
setAdapter((ListAdapter)新的ArticleAdapter(listArticle,getContext());
返回rootView;
}
公共提要(){
Parser Parser=新解析器();
onFinish(新的OnTaskCompleted(){
@凌驾
已完成的公用void ontask(列表){
setArticleList(列表);
}
@凌驾
公共无效申报人(例外e){
setArticleList(新的ArrayList());
e、 printStackTrace();
snackbar.postValue(“发生错误,请重试”);
}
});
parser.execute(urlString);
}
私有MutableLiveData snackbar=新的MutableLiveData();
公共可变LiveData getArticleList(){
如果(articleListLive==null){
articleListLive=新的可变LiveData();
}
返回articleListLive;
}
私有void setArticleList(列表articleList){
this.articleListLive.postValue(articleList);
}
}
我期待着一份新闻列表,但它崩溃了。 下面是我的适配器类:

public class ArticleAdapter extends RecyclerView.Adapter<ArticleAdapter.ViewHolder> {

    private List<Article> articles;

    private Context mContext;
    private WebView articleView;

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

    public List<Article> getArticleList() {
        return articles;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row, viewGroup, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int position) {

        Article currentArticle = articles.get(position);

        String pubDateString;
        try {
            String sourceDateString = currentArticle.getPubDate();

            SimpleDateFormat sourceSdf = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH);
            Date date = sourceSdf.parse(sourceDateString);

            SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM yyyy", Locale.getDefault());
            pubDateString = sdf.format(date);

        } catch (ParseException e) {
            e.printStackTrace();
            pubDateString = currentArticle.getPubDate();
        }

        viewHolder.title.setText(currentArticle.getTitle());

        Picasso.get()
                .load(currentArticle.getImage())
                .placeholder(R.drawable.placeholder)
                .into(viewHolder.image);

        viewHolder.pubDate.setText(pubDateString);

        StringBuilder categories = new StringBuilder();
        for (int i = 0; i < currentArticle.getCategories().size(); i++) {
            if (i == currentArticle.getCategories().size() - 1) {
                categories.append(currentArticle.getCategories().get(i));
            } else {
                categories.append(currentArticle.getCategories().get(i)).append(", ");
            }
        }

        viewHolder.category.setText(categories.toString());

        viewHolder.itemView.setOnClickListener(new View.OnClickListener() {

            @SuppressLint("SetJavaScriptEnabled")
            @Override
            public void onClick(View view) {

                //show article content inside a dialog
                articleView = new WebView(mContext);

                articleView.getSettings().setLoadWithOverviewMode(true);

                String title = articles.get(viewHolder.getAdapterPosition()).getTitle();
                String content = articles.get(viewHolder.getAdapterPosition()).getContent();

                articleView.getSettings().setJavaScriptEnabled(true);
                articleView.setHorizontalScrollBarEnabled(false);
                articleView.setWebChromeClient(new WebChromeClient());
                articleView.loadDataWithBaseURL(null, "<style>img{display: inline; height: auto; max-width: 100%;} " +

                        "</style>\n" + "<style>iframe{ height: auto; width: auto;}" + "</style>\n" + content, null, "utf-8", null);

                AlertDialog alertDialog = new AlertDialog.Builder(mContext).create();
                alertDialog.setTitle(title);
                alertDialog.setView(articleView);
                alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.dismiss();
                            }
                        });
                alertDialog.show();

                ((TextView) alertDialog.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
            }
        });
    }

    @Override
    public int getItemCount() {
        return articles == null ? 0 : articles.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder {
        TextView title;
        TextView pubDate;
        ImageView image;
        TextView category;

        public ViewHolder(View itemView) {

            super(itemView);
            title = itemView.findViewById(R.id.title);
            pubDate = itemView.findViewById(R.id.pubDate);
            image = itemView.findViewById(R.id.image);
            category = itemView.findViewById(R.id.categories);
        }
    }
}
公共类ArticleAdapter扩展了RecyclerView.Adapter{ 私人物品清单; 私有上下文; 私有网络视图articleView; 公共ArticleAdapter(列表、上下文){ 这个.文章=列表; this.mContext=上下文; } 公共列表getArticleList(){ 归还物品; } @非空 @凌驾 public ViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){ 视图v=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.row,viewGroup,false); 返回新的视图持有者(v); } @凌驾 public void onBindViewHolder(@NonNull final ViewHolder ViewHolder,int position){ Article currentArticle=articles.get(位置); 字符串pubDateString; 试一试{ String sourceDateString=currentArticle.getPubDate(); SimpleDataFormat sourceSdf=新的SimpleDataFormat(“EEE,d MMM yyy HH:mm:ss Z”,Locale.ENGLISH); Date-Date=sourceSdf.parse(sourceDateString); SimpleDataFormat sdf=新的SimpleDataFormat(“dd-MMMM-yyyy”,Locale.getDefault()); pubDateString=sdf.format(日期); }捕获(解析异常){ e、 printStackTrace(); pubDateString=currentArticle.getPubDate(); } viewHolder.title.setText(currentArticle.getTitle()); 毕加索 .load(currentArticle.getImage()) .placeholder(R.drawable.placeholder) .into(viewHolder.image); viewHolder.pubDate.setText(pubDateString); StringBuilder类别=新建StringBuilder(); 对于(int i=0;i