【问题标题】:Why do I get java.lang.UnsupportedOperationException? [closed]为什么我会得到 java.lang.UnsupportedOperationException? [关闭]
【发布时间】:2015-03-22 15:27:02
【问题描述】:

你能解释一下为什么我在刷新我的内容时得到“FATAL EXCEPTION: java.lang.UnsupportedOperationException”吗? 在正常情况下,该函数应该下载数据并为每一行创建一个回收器/卡...

public void onRefresh() {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    mSwipeRefreshLayout.setRefreshing(false);
                }
            }, 2500);

            new Thread(new Runnable(){
                public void run(){

                    if(!isNetworkAvailable()){
                        Toast.makeText(getApplicationContext(), getResources().getString(R.string.nointernet), Toast.LENGTH_LONG).show();
                        return;
                    }

                    String str=getOnline("http://ni141767_1.vweb12.nitrado.net/vp.php");
                    String lines[] = str.split("\\<.*?\\>");
                    for (int i = 0; i < lines.length; i++) {
                        String content[] = lines[i].split("_");

                        String fach = content[5];
                        String lehrer = content[6];

                        Data dataToAdd = new Data(fach,lehrer);
                        mData.add(dataToAdd);
                        mAdapter.addItem(i, dataToAdd);

                        content = null;
                    }

                }
            }).start();
        }

Data.java:

public class Data {
 public String text;
 public String lehrer;
 public Data(String text, String lehrer) {
 this.text = text;
 this.lehrer = lehrer;
 }
 }

CustomRecyclerAdapter.java:

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.Collections;
import java.util.List;

public class CustomRecyclerAdapter extends RecyclerView.Adapter<RecyclerViewHolder> {

    private List<Data> mData = Collections.emptyList();

    public CustomRecyclerAdapter() {
        // Pass context or other static stuff that will be needed.
    }

    public void updateList(List<Data> data) {
        mData = data;
        notifyDataSetChanged();
    }
    @Override
    public int getItemCount() {
        return mData.size();
    }

    @Override
    public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int position) {
        LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
        View itemView = inflater.inflate(R.layout.card, viewGroup, false);
        return new RecyclerViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(RecyclerViewHolder viewHolder, int position) {
        viewHolder.fach.setText(mData.get(position).text);
        viewHolder.lehrer.setText(mData.get(position).lehrer);
    }
    public void addItem(int position, Data data) {
        mData.add(position, data);
        notifyItemInserted(position);
    }

    public void removeItem(int position) {
        mData.remove(position);
        notifyItemRemoved(position);
    }

}

RecyclerViewHolder.java:

import android.support.v7.widget.RecyclerView;

导入android.view.View; 导入android.widget.TextView;

public class RecyclerViewHolder extends RecyclerView.ViewHolder {

        public TextView fach;
        public TextView lehrer;

        public RecyclerViewHolder(View itemView) {
            super(itemView);
            fach = (TextView) itemView.findViewById(R.id.fach);
            lehrer = (TextView) itemView.findViewById(R.id.lehrer);
        }
    }

【问题讨论】:

  • 请粘贴您的异常的完整堆栈跟踪。

标签: java android adapter android-recyclerview


【解决方案1】:

您不能添加到Collections.emptyList() 返回的List。此方法不返回ArrayListLinkedList,而是返回始终为空的不可变List

请改用new ArrayList&lt;&gt;()

【讨论】:

  • 不错的发现。您可以在答案中添加原因吗?
  • @Blackbelt 我又添加了一点。
  • 谢谢,没有更多错误。现在的问题是它为什么不创建卡片......你有什么想法吗?
  • 谢谢。你们中的任何人都知道为什么我得到“android.view.ViewRootImpl$CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及它的视图。”取消注释“notifyItemInserted(position);”在第 42 行的 CustomRecyclerView.java 中?
  • @Fabian 是的。这是因为您正在使用第二个线程。看到这个问题:stackoverflow.com/questions/5161951/…
【解决方案2】:

Collections.emptyList() 返回一个不可变列表(您将无法向列表中添加元素!!)

您应该使用 new 关键字将其初始化为一个新列表

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多