Java 不能多次更新FireBase数据库子项

Java 不能多次更新FireBase数据库子项,java,android,listview,firebase,Java,Android,Listview,Firebase,我有一个按钮,当您单击它时,它使EditText可编辑,第二个按钮将新字符串发送到数据库,数据库将更新后的字符串返回到listview 它在我第一次编辑时工作正常,但如果我想再次编辑它,它会更新数据库中的值,但在应用程序中,它会在循环中一直从新字符串切换到旧字符串 (例如,我希望能够多次更新“_name”) 这是我的适配器:(注意“editTremp”和“submitText”按钮) 公共类personalZoneAdapter扩展了ArrayAdapter{ 静态类ViewHolderItem

我有一个按钮,当您单击它时,它使EditText可编辑,第二个按钮将新字符串发送到数据库,数据库将更新后的字符串返回到listview

它在我第一次编辑时工作正常,但如果我想再次编辑它,它会更新数据库中的值,但在应用程序中,它会在循环中一直从新字符串切换到旧字符串

(例如,我希望能够多次更新“_name”)

这是我的适配器:(注意“editTremp”和“submitText”按钮)

公共类personalZoneAdapter扩展了ArrayAdapter{
静态类ViewHolderItem{
私人文本视图消息,额外,电话,日期时间,uid;
私有文本名;
私有图像按钮deleteTremp、editTremp、phoneBtn、submitText;
私人影像侧视图;
}
私人内部布局资源;
私有FirebaseAuth FirebaseAuth;
私有数据库参考数据库;
公共personalZoneAdapter(上下文上下文、内部布局资源、阵列列表){
超级(上下文、布局资源、列表);
this.layoutResource=layoutResource;
firebaseAuth=firebaseAuth.getInstance();
mDatabase=FirebaseDatabase.getInstance().getReference().child(“Posts”);
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
视图=转换视图;
最终视图持有人项目视图持有人;
如果(视图==null){
最终LayoutFlater充气器=LayoutFlater.from(getContext());
视图=充气机。充气(布局资源,空);
viewHolder=新的ViewHolderItem();
viewHolder.name=(EditText)view.findViewById(R.id.user\u name);
viewHolder.phone=(TextView)view.findViewById(R.id.user\u phone);
viewHolder.date\u time=(TextView)view.findViewById(R.id.user\u date\u time);
viewHolder.msg=(TextView)view.findViewById(R.id.user\u msg);
viewHolder.extra=(TextView)view.findViewById(R.id.user\u extra);
viewHolder.uid=(TextView)view.findViewById(R.id.user\u uid);
viewHolder.deleteTremp=(ImageButton)view.findViewById(R.id.remove);
viewHolder.editTremp=(ImageButton)view.findViewById(R.id.edit);
viewHolder.phoneBtn=(ImageButton)view.findViewById(R.id.phone\u btn);
viewHolder.submitText=(ImageButton)view.findViewById(R.id.submitText);
viewHolder.sideview=(ImageView)view.findviewbyd(R.id.user\u image);
view.setTag(viewHolder);
}
否则{
viewHolder=(ViewHolderItem)convertView.getTag();
}
最终TrempData数据=获取项目(位置);
//数据设置位置(位置);
//int[]androidColors=getContext().getResources().getIntArray(R.array.androidColors);
//int randomAndroidColor=androidColors[new Random().nextInt(androidColors.length)];
如果(数据!=null){
if(viewHolder.name!=null&viewHolder.phone!=null&viewHolder.msg!=null&viewHolder.date\u time!=null&viewHolder.uid!=null){
viewHolder.name.setText(data.get_name());
viewHolder.name.setTag(数据名称);
//name.setTextColor(randomandoridcolor);
viewHolder.phone.setText(data.get_phone());
viewHolder.name.setTag(数据。\u电话);
viewHolder.date\u time.setText(data.get\u timestamp());
viewHolder.name.setTag(数据._时间戳);
viewHolder.msg.setText(data.get_from()+”-->“+data.get_to()+”,“+data.get_date()+”,“+data.get_time());
viewHolder.uid.setText(data.get_uid());
viewHolder.name.setTag(data.\u-uid);
viewHolder.editTremp.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
viewHolder.submitText.setVisibility(View.VISIBLE);
viewHolder.name.setBackground(新彩色可绘制(白色));
viewHolder.name.setEnabled(true);
viewHolder.name.setCursorVisible(true);
viewHolder.name.setFocusableInTouchMode(true);
viewHolder.name.setInputType(InputType.TYPE\u CLASS\u TEXT);
viewHolder.name.requestFocus();
}
});
viewHolder.submitText.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
mDatabase.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
对于(DataSnapshot ds:DataSnapshot.getChildren()){
TrempData tremp=getItem(位置);
if(ds.getKey().toString().equals(tremp.get_key())){
viewHolder.name.setEnabled(false);
字符串new_name=viewHolder.name.getText().toString();
viewHolder.name.setBackground(新的彩色可绘制(透明));
viewHolder.submitText.setVisibility(View.GONE);
数据。设置名称(新名称);
mDatabase.child(ds.getKey().toString()).child(“\u name”).setValue(new\u name);
notifyDataSetChanged();
//Toast.makeText(getContext(),“Toast.LENGTH”.show();
打破
}
    public class personalZoneAdapter extends ArrayAdapter<TrempData>  {

    static class ViewHolderItem{
        private TextView  msg , extra,phone ,date_time ,uid ;
        private EditText name ;
        private ImageButton deleteTremp , editTremp , phoneBtn , submitText ;
        private ImageView sideview;
    }


    private int layoutResource;
    private FirebaseAuth firebaseAuth;
    private DatabaseReference mDatabase;

    public personalZoneAdapter(Context context, int layoutResource, ArrayList<TrempData> list) {
        super(context, layoutResource, list);
        this.layoutResource = layoutResource;
        firebaseAuth = FirebaseAuth.getInstance();
        mDatabase = FirebaseDatabase.getInstance().getReference().child("Posts");
    }


    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View view = convertView;
        final ViewHolderItem viewHolder;

        if (view == null) {
            final LayoutInflater Inflater = LayoutInflater.from(getContext());
            view = Inflater.inflate(layoutResource, null);

            viewHolder = new ViewHolderItem();
            viewHolder.name = (EditText) view.findViewById(R.id.user_name);
            viewHolder.phone = (TextView) view.findViewById(R.id.user_phone);
            viewHolder.date_time = (TextView) view.findViewById(R.id.user_date_time);
            viewHolder.msg = (TextView) view.findViewById(R.id.user_msg);
            viewHolder.extra = (TextView) view.findViewById(R.id.user_extra);
            viewHolder.uid = (TextView) view.findViewById(R.id.user_uid);
            viewHolder.deleteTremp = (ImageButton)view.findViewById(R.id.remove);
            viewHolder.editTremp = (ImageButton)view.findViewById(R.id.edit);
            viewHolder.phoneBtn = (ImageButton)view.findViewById(R.id.phone_btn);
            viewHolder.submitText = (ImageButton)view.findViewById(R.id.submitText);
            viewHolder.sideview = (ImageView)view.findViewById(R.id.user_image);

            view.setTag(viewHolder);
        }
        else{
            viewHolder = (ViewHolderItem) convertView.getTag();
        }

        final TrempData data = getItem(position);

        //data.setPos(position);
        //int[] androidColors = getContext().getResources().getIntArray(R.array.androidcolors);
        //int randomAndroidColor = androidColors[new Random().nextInt(androidColors.length)];

        if (data != null) {

            if (viewHolder.name != null & viewHolder.phone != null & viewHolder.msg != null & viewHolder.date_time != null & viewHolder.uid != null) {
                viewHolder.name.setText(data.get_name());
                viewHolder.name.setTag(data._name);
                //name.setTextColor(randomAndroidColor);
                viewHolder.phone.setText(data.get_phone());
                viewHolder.name.setTag(data._phone);
                viewHolder.date_time.setText(data.get_timestamp());
                viewHolder.name.setTag(data._timestamp);
                viewHolder.msg.setText(data.get_from() + "--> " + data.get_to() + ", " + data.get_date() + ", " + data.get_time());
                viewHolder.uid.setText(data.get_uid());
                viewHolder.name.setTag(data._uid);

                viewHolder.editTremp.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        viewHolder.submitText.setVisibility(View.VISIBLE);
                        viewHolder.name.setBackground(new ColorDrawable(WHITE));
                        viewHolder.name.setEnabled(true);
                        viewHolder.name.setCursorVisible(true);
                        viewHolder.name.setFocusableInTouchMode(true);
                        viewHolder.name.setInputType(InputType.TYPE_CLASS_TEXT);
                        viewHolder.name.requestFocus();

                    }
                });

                viewHolder.submitText.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        mDatabase.addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {
                                for (DataSnapshot ds : dataSnapshot.getChildren()) {
                                    TrempData tremp = getItem(position);
                                    if (ds.getKey().toString().equals(tremp.get_key())) {
                                        viewHolder.name.setEnabled(false);
                                        String new_name = viewHolder.name.getText().toString();
                                        viewHolder.name.setBackground(new ColorDrawable(TRANSPARENT));
                                        viewHolder.submitText.setVisibility(View.GONE);
                                        data.set_name(new_name);
                                        mDatabase.child(ds.getKey().toString()).child("_name").setValue(new_name);
                                        notifyDataSetChanged();
                                        //Toast.makeText(getContext(),"הטרמפ עודכן בהצלחה" + position,Toast.LENGTH_SHORT).show();
                                        break;
                                    }
                                }
                            }
                            @Override
                            public void onCancelled(DatabaseError databaseError) {

                            }
                        });
                    }
                });


                viewHolder.phoneBtn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent i = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + data.get_phone()));
                        getContext().startActivity(i);
                    }
                });

                viewHolder.deleteTremp.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        mDatabase.addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {
                                for (DataSnapshot ds : dataSnapshot.getChildren()) {
                                    TrempData tremp = getItem(position);
                                    if (ds.getKey().toString().equals(tremp.get_key())) {
                                        mDatabase.child(ds.getKey().toString()).removeValue();
                                        notifyDataSetChanged();
                                        //Toast.makeText(getContext(),"הטרמפ נמחק בהצלחה",Toast.LENGTH_SHORT).show();
                                        break;
                                    }
                                }
                            }

                            @Override
                            public void onCancelled(DatabaseError databaseError) {
                                Toast.makeText(getContext(),"ישנה בעיה. אנא נסה שוב",Toast.LENGTH_SHORT).show();
                            }
                        });
                    }
                });


                if(data.get_extras().length() == 0) viewHolder.extra.setVisibility(View.GONE);
                viewHolder.extra.setText("הערות:" + " " + data.get_extras());

                if(firebaseAuth.getCurrentUser().getUid().equals(viewHolder.uid.getText())){
                    viewHolder.deleteTremp.setVisibility(View.VISIBLE);
                    viewHolder.editTremp.setVisibility(View.VISIBLE);
                    viewHolder.phoneBtn.setVisibility(View.GONE);
                    viewHolder.sideview.setColorFilter(Color.rgb(255,164,30));
                }
                else{

                    viewHolder.submitText.setVisibility(View.GONE);
                    viewHolder.deleteTremp.setVisibility(View.GONE);
                    viewHolder.editTremp.setVisibility(View.GONE);
                    viewHolder.phoneBtn.setVisibility(View.VISIBLE);
                    viewHolder. sideview.setColorFilter(Color.rgb(176,176,176));
                }
            }
        }
        return view;
    }
}
viewHolder.submitText.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mDatabase.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                                TrempData tremp = getItem(position);
                                if (ds.getKey().toString().equals(tremp.get_key())) {
                                    viewHolder.name.setEnabled(false);
                                    String new_name = viewHolder.name.getText().toString();
                                    viewHolder.name.setBackground(new ColorDrawable(TRANSPARENT));
                                    viewHolder.submitText.setVisibility(View.GONE);
                                    data.set_name(new_name);
                                    mDatabase.child(ds.getKey().toString()).child("_name").setValue(new_name);
                                    notifyDataSetChanged();
                                    //Toast.makeText(getContext(),"הטרמפ עודכן בהצלחה" + position,Toast.LENGTH_SHORT).show();
                                    break;
                                }
                            }
                        }
                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });
                }
            });