Увеличение стоимости и сохранение в Firebase - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь создать приложение для симулятора торгового автомата и сохраняю значение в Firebase.

Это мои данные Firebase для номинала монет и количества выпивки:

This is my Firebase data for coin denomination and drink quantity

Это мое первое занятие: This is my first activity

Этомое второе занятие This is my second activity

Я хочу хранить монеты, введенные клиентом в каждом номинале (например: если клиент введет 20 центов, то количество для 20 центов будет добавлено к 1 в Firebase и т. д.), ноЯ не знаю, как это сделать.Та же проблема возникает для количества напитка (например, если количество = цена или количество> цена, система должна распределить напиток и вычесть количество напитка на 1 в базе данных Firebase).

Я понимаю логику, но яЯ не знаю, как реализовать это в разработке Android, так как я все еще учусь и новичок в этом.

Любая помощь будет принята с благодарностью.Заранее спасибо.

Это мой DrinkActivity.java

public class DrinkActivity extends AppCompatActivity {

    Button terminateBtn;
    ImageButton tenCent, twentyCent, fiftyCent, oneRinggit, slugCoin1, slugCoin2;
    TextView amount;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_drink);

        // Receive data
        String name  = getIntent().getExtras().getString("name");
        String price = getIntent().getExtras().getString("price");
        String image_url = getIntent().getExtras().getString("img");

        // init view
        TextView tv_name = findViewById(R.id.aa_name);
        TextView tv_price = findViewById(R.id.aa_price);
        ImageView img = findViewById(R.id.aa_thumbnail);

        // setting values to each view
        tv_name.setText(name);
        tv_price.setText(String.valueOf(price));

        RequestOptions requestOptions = new RequestOptions().centerCrop().placeholder(R.drawable.loading_shape).error(R.drawable.loading_shape);

        // set image using Glide
        Glide.with(this).load(image_url).apply(requestOptions).into(img);

        //Amount
        amount = (TextView) findViewById(R.id.amountView);

        //Coin Button
        tenCent = (ImageButton) findViewById(R.id.cent10);
        twentyCent = (ImageButton) findViewById(R.id.cent20);
        fiftyCent = (ImageButton) findViewById(R.id.cent50);
        oneRinggit = (ImageButton) findViewById(R.id.rm1);
        slugCoin1 = (ImageButton) findViewById(R.id.unknown1);
        slugCoin2 = (ImageButton) findViewById(R.id.unknown2);

        terminateBtn = (Button) findViewById(R.id.terminateBtn);

        //Terminate button
        terminateBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //When terminate the transaction, it should return the amount that already has
                //been inserted by the customer.
                Intent i = new Intent(DrinkActivity.this,Home.class);
                startActivity(i);
            }
        });

        //10 cent button
        tenCent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        amount.setText("RM 0.10");
                        playSound();
                    }
                }, 1000);
                amount.setText("Checking...");
            }
        });

        //20 cent button
        twentyCent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        amount.setText("RM 0.20");
                        playSound();
                    }
                }, 1000);
                amount.setText("Checking...");
            }
        });

        //50 cent button
        fiftyCent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        amount.setText("RM 0.50");
                        playSound();
                    }
                }, 1000);
                amount.setText("Checking...");
            }
        });

        //RM 1 button
        oneRinggit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        amount.setText("RM 1.00");
                        playSound();
                    }
                }, 1000);
                amount.setText("Checking...");
            }
        });

        //Slug coin 1 button
        slugCoin1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(DrinkActivity.this, "Invalid Coin!" , Toast.LENGTH_SHORT).show();
                        amount.setText("RM 0.00");
                        slugCoinSound();
                    }
                }, 1000);
                amount.setText("Checking...");
            }
        });

        //Slug coin 2 button
        slugCoin2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(DrinkActivity.this, "Invalid Coin!" , Toast.LENGTH_SHORT).show();
                        amount.setText("RM 0.00");
                        slugCoinSound();
                    }
                }, 1000);
                amount.setText("Checking...");
            }
        });

    }

    public void playSound() {
        MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.insert_coins);
        mediaPlayer.start();
    }

    public void slugCoinSound() {
        MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.change);
        mediaPlayer.start();
    }

}

1 Ответ

0 голосов
/ 03 января 2019

Вы должны использовать runTransaction метод firebase. Вот пример кода, который вы можете использовать для своих монет 20 центов. Код для других монет похож:

public void onClick(View view) {
DatabaseReference quantityRef = ref.child("yoururl/Coins/1/quantity");
quantityRef.runTransaction(new Transaction.Handler() {
    @Override
    public Transaction.Result doTransaction(MutableData mutableData) {
        Integer currentValue = mutableData.getValue(Integer.class);
        if (currentValue == null) {
            mutableData.setValue(0);
        } else {
            mutableData.setValue(currentValue + 1);
        }

        return Transaction.success(mutableData);
    }

    @Override
    public void onComplete(DatabaseError databaseError, boolean committed, DataSnapshot dataSnapshot) {
       System.out.println("Value incremented");
    }
});
}

Вы также можете реализовать его в addValueEventListener, но это не безопасно от параллелизма:

public void onClick(View view) {
    DatabaseReference ref = youdatabaseRef.child("Coins/1");
    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            int quantity = (int) dataSnapshot.child("quantity").getValue();
            ref.child("quantity").setValue(quantity++);
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) { }
    });   
}

В коде ref ссылка на вашу базу данных firebase. Вы кодируете это так:

final FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("server/saving-data/fireblog");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...