Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.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 我需要一种解决以下IndexOutOfBoundsException的方法_Java_Android_List_Indexoutofboundsexception - Fatal编程技术网

Java 我需要一种解决以下IndexOutOfBoundsException的方法

Java 我需要一种解决以下IndexOutOfBoundsException的方法,java,android,list,indexoutofboundsexception,Java,Android,List,Indexoutofboundsexception,我有一张单子。我为列表中的每个项目设置了cardview卡。我已在向上滑动时实现了删除,但当我删除最后一个项目(最后一张卡)时,将引发IndexOutOfBoundsException。 我的代码: 活动: public class FirstPage extends Activity { RallyRestApi restApi; private RecyclerView recyclerView; private CustomAdapter adapter;

我有一张单子。我为列表中的每个项目设置了cardview卡。我已在向上滑动时实现了删除,但当我删除最后一个项目(最后一张卡)时,将引发IndexOutOfBoundsException。 我的代码:

活动:

public class FirstPage extends Activity
{
    RallyRestApi restApi;
    private RecyclerView recyclerView;
    private CustomAdapter adapter;
    private List<MyData> data_list;
    private Context mcontext;
    String username;
    String password;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_first_page);
        mcontext=this;
        recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        data_list = new ArrayList<>();
        load_data();
        recyclerView.setLayoutManager(new LinearLayoutManager(mcontext,LinearLayoutManager.HORIZONTAL,false));
        adapter = new CustomAdapter(FirstPage.this,data_list);
        recyclerView.setAdapter(adapter);
        username=getIntent().getStringExtra("username");
        password=getIntent().getStringExtra("password");
        ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.UP )
        {
            @Override
            public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target)
            {
                Toast.makeText(getApplicationContext(), "on Move", Toast.LENGTH_SHORT).show();
                return false;
            }

            @Override
            public void onSwiped(final RecyclerView.ViewHolder viewHolder, int swipeDir)
            {

                Toast.makeText(getApplicationContext(), "Task Status changed to COMPLETE", Toast.LENGTH_LONG).show();
                String username = getIntent().getStringExtra("username");
                String password = getIntent().getStringExtra("password");
                try
                {
                    restApi=new RallyRestApi(new URI("https://rally1.rallydev.com"),username,password);
                    JsonObject updatedValues = new JsonObject();
                    updatedValues.addProperty("State", "Completed");
                    UpdateRequest taskUpdate = new UpdateRequest(data_list.get(viewHolder.getAdapterPosition()).getRef(), updatedValues);
                    restApi.update(taskUpdate);
                    data_list.remove(viewHolder.getAdapterPosition());
                    adapter.notifyDataSetChanged();
                }
                catch (URISyntaxException | IOException e)
                {
                            e.printStackTrace();
                }
            }
        };
        ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
        itemTouchHelper.attachToRecyclerView(recyclerView);
    }
公共类首页扩展活动
{
拉莱雷斯塔皮·雷斯塔皮;
私人回收站;
专用自定义适配器;
私有列表数据列表;
私有上下文;
字符串用户名;
字符串密码;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(窗口。功能\u无\u标题);
setContentView(R.layout.activity\u第一页);
mcontext=这个;
recyclerView=(recyclerView)findViewById(R.id.recycler\u视图);
data_list=new ArrayList();
加载_数据();
setLayoutManager(新的LinearLayoutManager(mcontext,LinearLayoutManager.HORIZONTAL,false));
adapter=新的CustomAdapter(第一页,这是数据列表);
recyclerView.setAdapter(适配器);
username=getIntent().getStringExtra(“用户名”);
password=getIntent().getStringExtra(“密码”);
ItemTouchHelper.SimpleCallback simpleItemTouchCallback=新建ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.UP)
{
@凌驾
公共布尔onMove(RecyclerView RecyclerView、RecyclerView.ViewHolder ViewHolder、RecyclerView.ViewHolder目标)
{
Toast.makeText(getApplicationContext(),“移动中”,Toast.LENGTH_SHORT.show();
返回false;
}
@凌驾
公共空间(最终回收视图.视图持有者视图持有者,int swipeDir)
{
Toast.makeText(getApplicationContext(),“任务状态更改为完成”,Toast.LENGTH_LONG.show();
字符串username=getIntent().getStringExtra(“用户名”);
字符串密码=getIntent().getStringExtra(“密码”);
尝试
{
restApi=new-RallyRestApi(新URI(“https://rally1.rallydev.com)、用户名、密码);
JsonObject updatedValues=新的JsonObject();
updatedValues.addProperty(“状态”、“完成”);
UpdateRequest taskUpdate=new UpdateRequest(data_list.get(viewHolder.getAdapterPosition()).getRef(),updatedValues);
restApi.update(任务更新);
数据列表。删除(viewHolder.getAdapterPosition());
adapter.notifyDataSetChanged();
}
捕获(URISyntaxException | IOException e)
{
e、 printStackTrace();
}
}
};
ItemTouchHelper ItemTouchHelper=新的ItemTouchHelper(simpleItemTouchCallback);
itemTouchHelper.attachToRecyclerView(recyclerView);
}
我的适配器类:

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

    private Context context;
    private List<MyData> my_data;
    FirstPage activity;
    RallyRestApi restApi;

    public CustomAdapter(FirstPage activity, List<MyData> my_data)
    {

        this.my_data = my_data;
        this.activity=activity;

    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card,parent,false);
        itemView.setMinimumWidth(parent.getMeasuredWidth());
        itemView.setMinimumHeight(parent.getMeasuredHeightAndState());
        return new ViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position)
    {
        holder.userstory.setText("User Story: "+my_data.get(position).getUserstory());
        holder.tasks.setText("Task: "+my_data.get(position).getTask());
        holder.seekBar.setMax(my_data.get(position).getEstimate());
        holder.seekBar.setProgress(my_data.get(position).getActual());
        holder.actual_estimate.setText(my_data.get(position).getActual()+"/"+my_data.get(position).getEstimate());
        holder.seekBar.setOnSeekBarChangeListener(new CircularSeekBar.OnCircularSeekBarChangeListener() {
            @Override
            public void onProgressChanged(CircularSeekBar circularSeekBar, int progress, boolean fromUser)
            {
//IOB exception
                holder.seekBar.setProgress(holder.seekBar.getProgress());
                holder.actual_estimate.setText(holder.seekBar.getProgress()+"/"+my_data.get(position).getEstimate());
            }

            @Override
            public void onStopTrackingTouch(CircularSeekBar seekBar)
            {
                try
                {
                    restApi=new RallyRestApi(new URI("https://rally1.rallydev.com"),activity.username,activity.password);
                    JsonObject updatedValues = new JsonObject();
                    updatedValues.addProperty("Actuals", holder.seekBar.getProgress());
                    UpdateRequest taskUpdate = new UpdateRequest(my_data.get(position).getRef(), updatedValues);
                    restApi.update(taskUpdate);
                    holder.actual_estimate.setText(holder.seekBar.getProgress()+"/"+my_data.get(position).getEstimate());
                    holder.seekBar.setProgress(holder.seekBar.getProgress());
                }
                catch (URISyntaxException | IOException e)
                {
                    e.printStackTrace();
                }
            }
            @Override
            public void onStartTrackingTouch(CircularSeekBar seekBar)
            {

            }
        });
        holder.seekBar.setProgress(holder.seekBar.getProgress());
        holder.actual_estimate.setText(holder.seekBar.getProgress()+"/"+my_data.get(position).getEstimate());
    }

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

    public  class ViewHolder extends  RecyclerView.ViewHolder
    {
        public TextView userstory,tasks,actual_estimate;
        public CircularSeekBar seekBar;
//
        public ViewHolder(View itemView)
        {
            super(itemView);
            userstory=(TextView) itemView.findViewById(R.id.tvUserStory);
            tasks=(TextView) itemView.findViewById(R.id.tvTask);
            seekBar=(CircularSeekBar) itemView.findViewById(R.id.circularSeekBar1);
            actual_estimate=(TextView) itemView.findViewById(R.id.tvactuals_estimate);
        }
    }
}
公共类CustomAdapter扩展了RecyclerView.Adapter{ 私人语境; 私有列表我的_数据; 首页活动; 拉莱雷斯塔皮·雷斯塔皮; 公共CustomAdapter(第一页活动,列出我的\u数据) { this.my_data=my_data; 这个。活动=活动; } @凌驾 public ViewHolder onCreateViewHolder(视图组父级,int-viewType) { View itemView=LayoutInflater.from(parent.getContext()).flate(R.layout.card,parent,false); itemView.setMinimumWidth(parent.getMeasuredWidth()); itemView.setMinimumHeight(parent.getMeasuredHeightAndState()); 返回新的ViewHolder(itemView); } @凌驾 公共无效onBindViewHolder(最终视图持有人,最终整型位置) { holder.userstory.setText(“用户故事:+my_data.get(position.getUserstory()); setText(“任务:+my_data.get(position.getTask()); holder.seekBar.setMax(my_data.get(position.getEstimate()); holder.seekBar.setProgress(my_data.get(position.getActual()); holder.actual_estimate.setText(my_data.get(position).getActual()+“/”+my_data.get(position).getEstimate()); holder.seekBar.setOnSeekBarChangeListener(新的Circularsekbar.OnCircularsekbarChangeListener(){ @凌驾 public void onProgressChanged(CircularsekBar CircularsekBar,int progress,boolean fromUser) { //IOB例外 holder.seekBar.setProgress(holder.seekBar.getProgress()); holder.actual_estimate.setText(holder.seekBar.getProgress()+“/”+my_data.get(position.getEstimate()); } @凌驾 TopTrackingTouch上的公共无效(循环Ekbar seekBar) { 尝试 { restApi=new-RallyRestApi(新URI(“https://rally1.rallydev.com“”,activity.username,activity.password); JsonObject updatedValues=新的JsonObject(); updatedValues.addProperty(“Actuals”,holder.seekBar.getProgress()); UpdateRequest taskUpdate=新的UpdateRequest(my_data.get(position).getRef(),updatedValues); restApi.update(任务更新); holder.actual_estimate.setText(holder.seekBar.getProgress()+“/”+my_data.get(position.getEstimate()); holder.seekBar.setProgress(holder.seekBar.getProgress()); } 捕获(URISyntaxException | IOException e) { e、 printStackTrace(); } } @凌驾 开始跟踪触摸时的公共无效(循环Ekbar seekBar) { } }); holder.seekBar.setProgress(holder.seekBar.getProgress()); holder.actual_estimate.setText(holder.seekBar.getProgress()+“/”+my_data.get(position.getEstimate()); } @凌驾 public int getItemCount()
if(!data_list.isEmpty()){
    data_list.remove(viewHolder.getAdapterPosition());
    adapter.notifyDataSetChanged();
}
public void onBindViewHolder(final ViewHolder holder, final int position)
{
    final SomeClass data = my_data.get(position);

    holder.seekBar.setOnSeekBarChangeListener(new CircularSeekBar.OnCircularSeekBarChangeListener() {
        @Override
        public void onProgressChanged(CircularSeekBar circularSeekBar, int progress, boolean fromUser)
        {
            holder.seekBar.setProgress(holder.seekBar.getProgress());
            holder.actual_estimate.setText(holder.seekBar.getProgress()+"/" + data.getEstimate());
        }