Как добавить сумму от детей из разных корневых узлов в базе данных Firebase - PullRequest
0 голосов
/ 07 ноября 2019

Я пробовал много способов получить сумму всех сумм от всех детей, но не работал.

Вот моя основная деятельность по этому конкретному заданию:

public class hostelincome extends AppCompatActivity {

   EditText name,amount,status,mod,seriesnumber;;
   Button storedata;
   TextView prevnumber;
   FirebaseDatabase firebaseDatabase;
   DatabaseReference reference,reference1;
String name1,amount1,status1,mod1,date,count1,count2,incometotal1;
double amount2,incometotal;
int total;

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

    name = (EditText)findViewById(R.id.name);
    amount = (EditText)findViewById(R.id.amount);
    status = (EditText)findViewById(R.id.status);
    final String currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date());
    mod = (EditText)findViewById(R.id.mod);
    storedata = (Button)findViewById(R.id.storedata);
    firebaseDatabase = FirebaseDatabase.getInstance();
    date = getIntent().getStringExtra("date");

    reference = 
    firebaseDatabase.getReference("Hostel").child(date).child("Income").child(currentDateTimeString 
    );



    storedata.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            name1 = name.getText().toString();
            amount1 = amount.getText().toString();
            status1 = status.getText().toString();
            mod1 = mod.getText().toString();



            reference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                   total = 0;

                    for(DataSnapshot ds : dataSnapshot.getChildren()) {
                        String amount = ds.child("amount").getValue(String.class);
                        int value = Integer.valueOf(amount);
                        total =+ value;
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });

            count1 = Integer.toString(total);

            Toast.makeText(getApplicationContext(),count1,Toast.LENGTH_LONG).show();


            if (amount1.isEmpty()){}
            else{
            amount2 = Double.parseDouble(amount1);}

            incomeinfo incomeinfo;
            incomeinfo = new incomeinfo(name1,amount1,status1,mod1);
            reference.setValue(incomeinfo);
        }
      });

     }
   }

Дата берется в виде строки, добавляя целые значения дня / месяца / года вместе.

Когда я запускаю эту программу, я получаю сообщение об ошибке при добавлении значений, которые:

  Process: org.electromob.budget, PID: 21949
  java.lang.NumberFormatException: s == null
    at java.lang.Integer.parseInt(Integer.java:570)
    at java.lang.Integer.valueOf(Integer.java:794)
    at org.electromob.budget.hostelincome$1$1.onDataChange(hostelincome.java:71)
    at 
  com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase- 
  database@@19.2.0:75)
    at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase- 
  database@@19.2.0:63)
    at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase- 
  database@@19.2.0:55)
    at android.os.Handler.handleCallback(Handler.java:790)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:7000)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)'''

моя информация по базе данных о пожарных процессах

    public class incomeinfo {

    public String payeename;
    public String amount;
    public String status;
    public String mod;

    public incomeinfo() {
    }


    public incomeinfo(String payeename, String amount, String status, String mod) {
    this.payeename = payeename;
    this.amount = amount;
    this.status = status;
    this.mod = mod;
    }

    public String getPayeename() {
    return payeename;
    }

    public void setPayeename(String payeename) {
    this.payeename = payeename;
    }

    public String getAmount() {
    return amount;
    }

    public void setAmount(String amount) {
    this.amount = amount;
    }

    public String getStatus() {
    return status;
    }

    public void setStatus(String status) {
    this.status = status;
    }

    public String getMod() {
    return mod;
    }

    public void setMod(String mod) {
    this.mod = mod;
    }

    }

Структура Firebase добавлена ​​ниже моего проекта:

Firebase storing structure picture click on the link

Может кто-нибудь помочь мне с решениемна мою ошибку?

1 Ответ

1 голос
/ 07 ноября 2019

Похоже, вы читаете один уровень слишком низко в JSON. Ваш onDataChange выполняет итерацию по отдельным свойствам amount, mod, payeename и status, которые затем не имеют дочернего элемента amount.

Если это действительно такВы можете исправить это, прикрепив слушателя на уровень выше:

reference = firebaseDatabase.getReference("Hostel").child(date).child("Income");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...