Я пытаюсь раздуть меню из своего HomeActivity, но приложение вылетает, когда я нажимаю на любой из элементов в списке

#java #android

#java #Android

Вопрос:

 E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.example.myapplication, PID: 22175
        android.content.res.Resources$NotFoundException: String resource ID #0x3c
            at android.content.res.Resources.getText(Resources.java:367)
            at android.widget.TextView.setText(TextView.java:6370)
            at com.example.myapplication.HomeActivity.updateData(HomeActivity.java:244)
            at com.example.myapplication.HomeActivity$4$1.onClick(HomeActivity.java:187)
            at android.view.View.performClick(View.java:7125)
            at android.view.View.performClickInternal(View.java:7102)
            at android.view.View.access$3500(View.java:801)
            at android.view.View$PerformClick.run(View.java:27336)
            at android.os.Handler.handleCallback(Handler.java:883)
            at android.os.Handler.dispatchMessage(Handler.java:100)
            at android.os.Looper.loop(Looper.java:214)
            at android.app.ActivityThread.main(ActivityThread.java:7356)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)



public  void updateData(){

        AlertDialog.Builder mydialog = new AlertDialog.Builder(HomeActivity.this);
        LayoutInflater inflater = LayoutInflater.from(HomeActivity.this);
        View mView = inflater.inflate(R.layout.update_inputfield,null);
        final AlertDialog dialog = mydialog.create();

        dialog.setView(mView);


        final EditText edt_Type = mView.findViewById(R.id.edt_type_upd);
        final EditText edt_Amount = mView.findViewById(R.id.edt_amount_upd);
        final EditText edt_Note = mView.findViewById(R.id.edt_note_upd);

        edt_Type.setText(type);
        edt_Type.setSelection(type.length());

        edt_Amount.setText(amount);
        edt_Amount.setSelection(String.valueOf(amount).length());
        //edt_Amount.setSelection(Integer.toString(amount).length());

        edt_Note.setText(note);
        edt_Note.setSelection(note.length());

        Button btnUpdate = mView.findViewById(R.id.btn_save_upd);
        Button btnDelete = mView.findViewById(R.id.btn_delete_upd);

        btnUpdate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                type = edt_Type.getText().toString().trim();

                String mAmount = String.valueOf(amount);
                mAmount = edt_Amount.getText().toString().trim();

                note = edt_Note.getText().toString().trim();

                int amt = Integer.parseInt(mAmount);

                String date = DateFormat.getDateInstance().format(new Date());

                Data data = new Data(type,amt,note,date,post_key);

                mDatabase.child(post_key).setValue(data);

                dialog.dismiss();
            }
        });

And I am calling this updateData() method from 

   

  protected void onStart() {
            super.onStart();
    
            FirebaseRecyclerAdapter<Data,MyViewHolder>adapter=new FirebaseRecyclerAdapter<Data, MyViewHolder>
                    (
                            Data.class,
                            R.layout.item_data,
                            MyViewHolder.class,
                            mDatabase
                    )
            {
    
      
    
          @Override
            protected void populateViewHolder(MyViewHolder viewHolder, final Data model, final int position) {
    
                viewHolder.setDate(model.getDate());
                viewHolder.setType(model.getType());
                viewHolder.setAmount(model.getAmount());
                viewHolder.setNote(model.getNote());
    
                viewHolder.myview.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
    
                        post_key=getRef(position).getKey();
                        type=model.getType();
                        note=model.getNote();
                        amount=model.getAmount();
    
                        //amount=model.getAmount();
    
                        updateData();
                    }
                });
    
            }
        };
    
        recyclerView.setAdapter(adapter);
    }
  

Я создаю приложение для составления списка покупок на каждый день и использую адаптер firebaserecycler для создания списка, но когда я нажимаю на любой из элементов списка, он не отображает раздутое меню, как должно.
Любая помощь будет оценена!
Когда я нажимаю на любой из элементов, приложение продолжает сбой.
Это дает мне раздутое меню, когда я нажимаю на плавающую кнопку действия
, и когда я нажимаю на любой из элементов списка, он не работает

Комментарии:

1. Опубликовать свой код? Кажется, что вы пытаетесь ввести строку, но, возможно, вместо этого отправляете int? Например, int a = 5; EditText.setText(a); что-то в этом роде. В любом случае, необходим код, чтобы увидеть, что не так

2. Хорошо, я отредактирую сообщение и вставлю свой код обновления

Ответ №1:

строка

 edt_Amount.setText(amount);
  

сумма — целое число. Когда вы вызываете setText с помощью int, он ищет идентификатор amount, и именно поэтому он терпит неудачу. Измените эту строку на:

 edt_Amount.setText(String.valueOf(amount));
  

Я продолжу читать ваш код, чтобы узнать, произойдет ли это чаще, отредактирую, если да

Редактировать:

 String mAmount = String.valueOf(amount);
            mAmount = edt_Amount.getText().toString().trim();

            note = edt_Note.getText().toString().trim();

            int amt = Integer.parseInt(mAmount);
  

Эта часть — своего рода плохая практика, вы берете int, преобразуете его в String и ничего с ним не делаете. Переназначите эту строку на другое значение. Затем анализирует это значение обратно в int, вы можете заменить его на:

 int amt = Integer.parseInt(edt_Amount.getText().toString().trim());
  

Обратите внимание, что строка

             note = edt_Note.getText().toString().trim();
  

все в порядке, вы можете сохранить его после / перед другими строками

Комментарии:

1. Изменил значение на this => edt_Amount.setText(String.valueOf(сумма) . length()); и переназначил значение int amt = Integer.parseInt(edt_Amount.getText().toString().trim()); Но все равно он показывает ту же ошибку

2. Извините, я изменил свою строку, вам это не нужно. длина в конце.

3. Ошибка находится в строке 367, согласно исходному сообщению об ошибке, не возражаете добавить номера строк или просто отметить строки 362-372?