Получить массив из другого класса и показать его закусочной

Я попытался получить массив из адаптера из своего кода

вот массив, который я хотел получить от своего адаптера с именем MakananAdapter:

private int[] JumlahPesan = {0,0,0,0};

Массив постоянно меняется, так как пользователь будет решать, какую сумму он хочет, вот код onBindViewHolder:

public void onBindViewHolder(@NonNull viewHolder holder, final int position) {
    ImageView ivMakanan = holder.ivMakanan;
    TextView tvNamaHarga = holder.tvNamaMakanan;
    TextView tvKetersediaan = holder.tvKetersediaan;
    TextView tvHarga = holder.tvHargaMakanan;
    final TextView tvPesanan = holder.tvJumlahPesanan;
    Button btnTambah = holder.btnTambah;
    Button btnKurang = holder.btnKurang;

    ivMakanan.setImageResource(makanans.get(position).getGambarMakanan());
    tvNamaHarga.setText(makanans.get(position).getNamaMakanan());
    tvKetersediaan.setText("Stok : " + makanans.get(position).getStatusMakanan());
    tvHarga.setText("Harga : " + makanans.get(position).getHargaMakanan());
    btnTambah.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            JumlahPesan[position]++;
            tvPesanan.setText(String.valueOf(JumlahPesan[position]));
        }
    });
    btnKurang.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            JumlahPesan[position]--;
            tvPesanan.setText(String.valueOf(JumlahPesan[position]));
        }
    });
}

как вы можете видеть, я делаю кнопку, которая увеличивает и уменьшает данные массива

и я попытался получить данные массива для своей деятельности, но все равно получаю сообщение об ошибке.

моя деятельность с именем PilihMakananActivity.class

вот массив для сохранения данных с адаптера

private int[] Pesanan = {0,0,0,0};

и я попытался получить данные в onResume

protected void onResume() {
    super.onResume();
    com.example.iotforcanteen.adapter.MakananAdapter coba = null;
    for (int i = 0; i<4 ; i++) {
        Pesanan [i]= coba.AmbilJumlahPesanan(i);
    }
}

и я пытался показать это в закусочной, как это

btnKonfirmasi.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Snackbar.make(v, Pesanan[0] + Pesanan[1] + Pesanan[2] + Pesanan[3],Snackbar.LENGTH_SHORT).show();
    }
});

Мне очень жаль, если код такой беспорядочный, потому что я новичок в разработке Android. Есть ли способ исправить эту ошибку?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
142
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

У него есть ошибка, потому что вы установили нулевое значение адаптера в onResume . Но в целом я предполагаю, что вы используете RecyclerView в коде, поэтому шаги по использованию RecyclerView важны, сначала вы должны установить LayoutManager для RecyclerView. Затем создайте адаптер и установите для него RecyclerView, и я рекомендую вам выполнить эти шаги в onCreate, а не в onResume. Вот небольшой пример

    RecyclerView recyclerView = findViewById(R.id.rec);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    adapter = new MyRecyclerViewAdapter(this, list);
    recyclerView.setAdapter(adapter);

Также сделайте свой массив в адаптере общедоступным или напишите для него геттер. После вызова setAdapter для RecyclerView вы можете получить свои данные в адаптере. Например, вы можете определить кнопку и в OnClickListener получить нужный массив (здесь JumlahPesan) в адаптере

вы не запускаете этот адаптер (null) и несколькими строками ниже пытаетесь получить доступ к данным из него, это NullPointerException

com.example.iotforcanteen.adapter.MakananAdapter coba = null;
for (int i = 0; i<4 ; i++) {
    Pesanan [i]= coba.AmbilJumlahPesanan(i);
}

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

обратите внимание, что onResume вызывается один раз в начале, поэтому ваш Pesanan не будет иметь текущих данных, только копировать с начала Activity

возможно, просто получите ваши значения сразу при нажатии кнопки, без копии массива в Activity:

btnKonfirmasi.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Snackbar.make(coordinatorLayout,
            adapterAttachedToView.AmbilJumlahPesanan(0) + " " +
            adapterAttachedToView.AmbilJumlahPesanan(1) + " " + 
            adapterAttachedToView.AmbilJumlahPesanan(2) + " " + 
            adapterAttachedToView.AmbilJumlahPesanan(3),
            Snackbar.LENGTH_SHORT).show();
    }
});

обратите внимание, что Snackbar.make( должен занять View, в котором появится Snackbar, а не нажат Button (вы передаете v в Snackbar.make)

Другие вопросы по теме