Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.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 按下按钮后,Android Firebase RecyclerView出现无法解释的错误_Java_Android_Firebase_Firebase Realtime Database_Android Recyclerview - Fatal编程技术网

Java 按下按钮后,Android Firebase RecyclerView出现无法解释的错误

Java 按下按钮后,Android Firebase RecyclerView出现无法解释的错误,java,android,firebase,firebase-realtime-database,android-recyclerview,Java,Android,Firebase,Firebase Realtime Database,Android Recyclerview,我有一个RecyclerView和一个按钮用于“绑定”每个项目(移动到DB的另一个子项) 大多数情况下,它工作得很好,但有时我会收到indexOutOfBounds异常 这是一个屏幕截图: 当我在顶部的“回收器”视图项中按“绑定”时,我收到了这个错误。 我让它打印这行: Log.d("dDebug","Almost bug! Size: " + ((MissionAdapter) MissionAdapter.this).mSnapshots.size() + " , index: " + m

我有一个RecyclerView和一个按钮用于“绑定”每个项目(移动到DB的另一个子项)

大多数情况下,它工作得很好,但有时我会收到indexOutOfBounds异常

这是一个屏幕截图:

当我在顶部的“回收器”视图项中按“绑定”时,我收到了这个错误。 我让它打印这行:

Log.d("dDebug","Almost bug! Size: " + ((MissionAdapter) MissionAdapter.this).mSnapshots.size() + " , index: " + missionPosition);
它打印了这个:

D/dDebug: Almost bug! Size: 1 , index: 1
在这里,您可以看到bug大小为1,索引为1,因此它将具有indexOutOfBounds

代码如下:

    public class AvailableFragmentPilot extends Fragment {

    private String TAG = "dDEBUG";
    private RecyclerView mavailableList;

    private DatabaseReference mAvailableMissionsDb, mPendingMissionsDb;
    private FirebaseAuth mAuth;
    private ProgressDialog mSubmitMsnProgress;

    private String mCurrent_pilot_id;

    private View mMainView;

//    Query queries;

    public AvailableFragmentPilot() {
        // Required empty public constructor
    }


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


        mMainView = inflater.inflate(R.layout.fragment_of_recycler_view_user, container, false);

        mavailableList = (RecyclerView)mMainView.findViewById(R.id.mission_recycler_user);
        mAuth = FirebaseAuth.getInstance();
        mSubmitMsnProgress = new ProgressDialog(getContext());

        mCurrent_pilot_id = mAuth.getCurrentUser().getUid();

        mAvailableMissionsDb = FirebaseDatabase.getInstance().getReference().child("Missions").child("Available");
        mAvailableMissionsDb.keepSynced(true);

        mPendingMissionsDb = FirebaseDatabase.getInstance().getReference().child("Missions").child("Pending");
        mPendingMissionsDb.keepSynced(true);

//        queries = mAvailableMissionsDb.orderByChild("user_uid").equalTo(mCurrent_pilot_id);

        mavailableList.setHasFixedSize(true);
        mavailableList.setLayoutManager(new LinearLayoutManager(getContext()));

        // Inflate the layout for this fragment
        return mMainView;
    }

    @Override
    public void onStart() {
        super.onStart();

        mavailableList.setAdapter(new MissionAdapter(mAvailableMissionsDb));
    }

    private class MissionAdapter extends FirebaseRecyclerAdapter<Mission, AvailableFragmentPilot.MissionsViewHolder> {

        public MissionAdapter(Query queries){
            super(Mission.class, R.layout.missions_single_layout, AvailableFragmentPilot.MissionsViewHolder.class, queries);
        }

        @Override
        protected void populateViewHolder(AvailableFragmentPilot.MissionsViewHolder missionViewHolder, final Mission missionModel, final int missionPosition) {
            Log.d(TAG, "inside populateViewHolder" + missionModel.getType() + " , " + missionModel.getDescription());
            missionViewHolder.setMissionName(missionModel.getType());
            missionViewHolder.setMissionDescription(missionModel.getDescription());
            missionViewHolder.setMissionStatus(missionModel.getStatus());
            missionViewHolder.button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Mission clickedMission = null;
                    if (((MissionAdapter) MissionAdapter.this).mSnapshots.size()>missionPosition){
                        clickedMission = AvailableFragmentPilot.MissionAdapter.this.getItem(missionPosition);
                        Log.d("dDebug","Ein bug. Size: " + ((MissionAdapter) MissionAdapter.this).mSnapshots.size() + " , index: " + missionPosition + " , mission: " + clickedMission.getType() + ": " + clickedMission.getDescription());
                    }
                    else{
                        Log.d("dDebug","Almost bug! Size: " + ((MissionAdapter) MissionAdapter.this).mSnapshots.size() + " , index: " + missionPosition);
                    }
                    if (clickedMission != null){ // for the sake of being extra-safe
//                        String url_str = getRef(missionPosition).toString();
//                        String uuid_for_mission = url_str.split("/")[5];
                        Log.d(TAG,"The button was pressed for mission: " + clickedMission.getType() + " , uid: " + missionModel.getMission_uid());
//                        removeMission(uuid_for_mission);
                        bindMission(clickedMission);
                    }
                }
            });
        }
    }

    public void bindMission(final Mission mission){
        AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
        builder.setCancelable(false);
        builder.setTitle("Mission bind");
        builder.setMessage("Are you sure you want to bind this mission?");
        builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int id) {
                mAvailableMissionsDb.child(mission.getMission_uid()).setValue(null);

                final HashMap<String, String> missionMap = new HashMap<>();
                missionMap.put("username", mission.getUsername());
                missionMap.put("user_uid", mission.getUser_uid());
                missionMap.put("mission_uid", mission.getMission_uid());
                missionMap.put("type", mission.getType());
                missionMap.put("status", "Pending");
                missionMap.put("description", mission.getDescription());
                missionMap.put("x", String.valueOf(mission.getX()));
                missionMap.put("y", String.valueOf(mission.getY()));
                missionMap.put("pilot_uid", mCurrent_pilot_id);

                mPendingMissionsDb.child(mission.getMission_uid()).setValue(missionMap).addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if (task.isSuccessful()){
//                            Log.d("dDebug","Before");
                            mSubmitMsnProgress.dismiss();
                            Toast.makeText(getContext(), ("Bind to mission " + mission.getType()),
                                    Toast.LENGTH_LONG).show();
                            Log.d("dDebug","Painting in Red 1");
                        }
                        else {
                            Toast.makeText(getContext(), "Something went wrong",
                                    Toast.LENGTH_SHORT).show();

                        }
                    }
                });
            }
        })
                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.d("dDebug","ok, not binding");
                    }
                });

        // Create the AlertDialog object and return it
        builder.create().show();
    }

    public static class MissionsViewHolder extends RecyclerView.ViewHolder {
        View mView;
        Button button ;

        public MissionsViewHolder(View itemView) {
            super(itemView);
            mView = itemView;
            button = (Button)mView.findViewById(R.id.mission_single_button);
            button.setText("BIND");
        }

        public void setMissionName(String name){
            TextView mMissionNameView = mView.findViewById(R.id.mission_single_name);
            mMissionNameView.setText(name);
        }

        public void setMissionStatus(String status){
            TextView mMissionStatusView = mView.findViewById(R.id.mission_single_status);
            mMissionStatusView.setText(status);
            if (status.equals("Available")){
                mMissionStatusView.setTextColor(Color.parseColor("#008000"));;
            } else {
                mMissionStatusView.setTextColor(Color.parseColor("#FF0000"));;
            }
        }

        public void setMissionDescription(String description){
            TextView mMissionDescriptionView = mView.findViewById(R.id.mission_single_description);
            mMissionDescriptionView.setText(description);
        }
    }
}
公共类AvailableFragmentPilot扩展片段{
私有字符串TAG=“dDEBUG”;
private RecyclerView MavalableList;
专用数据库参考MavaailableMissionDB、MPendingMissionDB;
私人消防队;
私有进程对话框mSubmitMsnProgress;
专用字符串mCurrent\u pilot\u id;
私人视图;
//查询;
公共可用的广告试播(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
mMainView=充气机。充气(R.layout.fragment\u of\u recycler\u view\u user,container,false);
mavailableList=(RecyclerView)mMainView.findViewById(R.id.mission\u recycler\u user);
mAuth=FirebaseAuth.getInstance();
mSubmitMsnProgress=newprogressdialog(getContext());
mCurrent_pilot_id=mAuth.getCurrentUser().getUid();
mavaailablemissiondb=FirebaseDatabase.getInstance().getReference().child(“任务”).child(“可用”);
mavailablemissiondb.keepSynced(true);
mPendingMissionsDb=FirebaseDatabase.getInstance().getReference().child(“任务”).child(“待定”);
mpendingmissiondb.keepSynced(true);
//querys=mavaailablemissiondb.orderByChild(“用户id”).equalTo(mCurrent\u pilot\u id);
mavaailableList.setHasFixedSize(true);
setLayoutManager(新的LinearLayoutManager(getContext());
//为该碎片膨胀布局
返回视图;
}
@凌驾
public void onStart(){
super.onStart();
setAdapter(新任务适配器(mavailablemissiondb));
}
私有类任务适配器扩展FirebaseRecyclerAdapter{
公共任务适配器(查询){
super(Mission.class,R.layout.missions\u single\u布局,AvailableFragmentPilot.missionViewHolder.class,查询);
}
@凌驾
受保护的空白填充视图持有者(可用的标签飞行员.任务视图持有者任务视图持有者,最终任务任务模型,最终任务位置){
Log.d(标记,“内部populateViewHolder”+missionModel.getType()+”,“+missionModel.getDescription());
setMissionName(missionModel.getType());
setMissionDescription(missionModel.getDescription());
setMissionStatus(missionModel.getStatus());
missionViewHolder.button.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
任务clickedMission=null;
if(((MissionAdapter)MissionAdapter.this).mSnapshots.size()>missionPosition){
单击Dismission=AvailableFragmentPilot.MissionAdapter.this.getItem(任务位置);
Log.d(“dDebug”,“Ein bug.Size:”+((MissionAdapter)MissionAdapter.this).mSnapshots.Size()+”,索引:“+missionPosition+”,任务:“+clickedMission.getType()+”:“+clickedMission.getDescription());
}
否则{
Log.d(“dDebug”,“几乎bug!大小:”+((MissionAdapter)MissionAdapter.this).mSnapshots.Size()+”,索引:“+missionPosition”);
}
如果(clickedMission!=null){//为了更加安全
//字符串url_str=getRef(missionPosition).toString();
//字符串uuid_for_mission=url_str.split(“/”[5];
Log.d(标签,“任务按钮被按下:”+clickedMission.getType()+”,uid:“+missionModel.getMission_uid());
//移除(uuid_用于_任务);
绑定任务(单击任务);
}
}
});
}
}
公共任务(最终任务){
AlertDialog.Builder=新建AlertDialog.Builder(getContext());
builder.setCancelable(false);
建造商名称(“任务绑定”);
setMessage(“您确定要绑定此任务吗?”);
builder.setPositiveButton(“是”,新建DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface对话框,int-id){
mavaailablemissionsdb.child(mission.getMission_uid()).setValue(null);
final HashMap commissionmap=new HashMap();
missionMap.put(“用户名”,mission.getUsername());
missionMap.put(“user\u-uid”,mission.getUser\u-uid());
missionMap.put(“mission\u-uid”,mission.getMission\u-uid());
missionMap.put(“type”,mission.getType());
任务地图放置(“状态”、“待定”);
missionMap.put(“description”,mission.getDescription());
missionMap.put(“x”,String.valueOf(mission.getX());
missionMap.put(“y”,String.valueOf(mission.getY());
missionMap.put(“pilot\u uid”,McCurrent\u pilot\u id);
mpendingmissiondb.child(mission.getMission_uid()).setValue(missionMap.addOnCompleteListener(新的OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
//