Android 从Firebase数据库的特定字段首次启动应用程序时未获取任何值或零。帮我指出哪里出了问题?

Android 从Firebase数据库的特定字段首次启动应用程序时未获取任何值或零。帮我指出哪里出了问题?,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我已经编写了从firebase数据库获取存储值的代码。 但是,当我第一次启动应用程序时(在我关闭应用程序、从电话进程中清除应用程序并再次启动应用程序时也会发生这种情况),值可能为零/或者可能无法获取,而不是以前存储在该字段中的值。 实际上,当我在第一次发布后添加股票时,如果我再次添加股票,效果会很好。(意味着oldstock+newstock)但在第一次发布应用程序时,它不会获得旧值,而不是在我第一次添加股票时获得值,它会用旧值替换该值,然后所有的事情都会很好地工作,比如变旧,在旧的和存储的基础

我已经编写了从firebase数据库获取存储值的代码。 但是,当我第一次启动应用程序时(在我关闭应用程序、从电话进程中清除应用程序并再次启动应用程序时也会发生这种情况),值可能为零/或者可能无法获取,而不是以前存储在该字段中的值。 实际上,当我在第一次发布后添加股票时,如果我再次添加股票,效果会很好。(意味着oldstock+newstock)但在第一次发布应用程序时,它不会获得旧值,而不是在我第一次添加股票时获得值,它会用旧值替换该值,然后所有的事情都会很好地工作,比如变旧,在旧的和存储的基础上添加新的,并且没有错误或警告。 伙计们,我想解决这件事。 再次感谢你的帮助

这是我的数据库结构。

这是我的代码:-

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_stockaddpage);
    btnsbmt =(Button)findViewById(R.id.button);
    btnupdt =(Button)findViewById(R.id.updt_btn);
    stock_rev = FirebaseDatabase.getInstance().getReference().child("STOCK").child("FLOWERS").child("ROSE").child("instock");
    stock_rev.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            finstockval2=dataSnapshot.getValue(long.class);

            Toast.makeText(stockaddpageActivity.this, ""+finstockval2, Toast.LENGTH_SHORT).show();
        }

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

        }
    });
    btnsbmt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //  Toast.makeText(MainActivity.this, "entered.....", Toast.LENGTH_SHORT).show();
            spnitm = (Spinner) findViewById(R.id.typspn);
            spnname = (Spinner) findViewById(R.id.nmspn);

            qtyvalues = (EditText) findViewById(R.id.qtyinpt);
            msrspn = (Spinner) findViewById(R.id.measurespn);

            itmtype = spnitm.getSelectedItem().toString();
            itmname = spnname.getSelectedItem().toString();
            stckinpval = qtyvalues.getText().toString();
            convrtdval = Long.parseLong(stckinpval);

            msrval = msrspn.getSelectedItem().toString();

            Log.d("first","in click");

            if (itmtype.equals("Flowers")) {

                Toast.makeText(stockaddpageActivity.this, "entered.....flowers", Toast.LENGTH_SHORT).show();

                if (itmname.equals("Rose")) {
                    Toast.makeText(stockaddpageActivity.this, "entered.....rose", Toast.LENGTH_SHORT).show();

                    datareff1 = FirebaseDatabase.getInstance().getReference().child("STOCK").child("FLOWERS").child("ROSE").child("instock");
                    datareff2 = FirebaseDatabase.getInstance().getReference().child("STOCK").child("FLOWERS").child("ROSE").child("History");


                    if (convrtdval != null) {
                        if (msrval.equals("Grams")) {
                            calculatedvalue = convrtdval;
                            fintype = "Flowers";
                            finname = "Rose";
                            finstockval = finstockval2+calculatedvalue;
                            finstockval2=0;
                            finmeasure = "Grams";
                            datareff1.setValue(finstockval);
                            Log.d("in gram","in gram");
                            currentDate =Calendar.getInstance().getTime();
                            tim = currentDate.toString();


                            Toast.makeText(stockaddpageActivity.this, "Grams : Added", Toast.LENGTH_SHORT).show();
                            //Toast.makeText(MainActivity.this, dt, Toast.LENGTH_SHORT).show();
                            Toast.makeText(stockaddpageActivity.this, tim, Toast.LENGTH_SHORT).show();
                        } else {
                            calculatedvalue = (convrtdval) * 1000;
                            fintype = "Flowers";
                            finname = "Rose";
                            finstockval = finstockval2+calculatedvalue;
                            finstockval=0;
                            finmeasure = "Kilograms";
                            datareff1.setValue(calculatedvalue);
                            Toast.makeText(stockaddpageActivity.this, "KG : Added", Toast.LENGTH_SHORT).show();

                        }
                    }
                }
                if (itmname.equals("Lily")) {
                    Toast.makeText(stockaddpageActivity.this, "entered.....lilly", Toast.LENGTH_SHORT).show();

                    datareff1 = FirebaseDatabase.getInstance().getReference().child("STOCK").child("FLOWERS").child("LILLY").child("instock");
                    datareff2 = FirebaseDatabase.getInstance().getReference().child("STOCK").child("FLOWERS").child("LILLY").child("History");
                    stock_rev = FirebaseDatabase.getInstance().getReference().child("STOCK").child("FLOWERS").child("LILLY").child("instock");
                    stock_rev.addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            finstockval3 = dataSnapshot.getValue(Long.class);
                        }

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

                        }
                    });
                    if (convrtdval != null) {
                        if (msrval.equals("Grams")) {
                            calculatedvalue = convrtdval;
                            fintype = "Flowers";
                            finname = "Lilly";
                            finstockval = finstockval3+calculatedvalue;
                            finmeasure = "Grams";
                            datareff1.setValue(finstockval);
                            Log.d("in gram","in gram");
                            currentDate =Calendar.getInstance().getTime();
                            tim = currentDate.toString();


                            Toast.makeText(stockaddpageActivity.this, "Grams : Added", Toast.LENGTH_SHORT).show();
                            //Toast.makeText(MainActivity.this, dt, Toast.LENGTH_SHORT).show();
                            Toast.makeText(stockaddpageActivity.this, tim, Toast.LENGTH_SHORT).show();
                        } else {
                            calculatedvalue = (convrtdval) * 1000;
                            fintype = "Flowers";
                            finname = "Lilly";
                            finstockval = finstockval3+calculatedvalue;
                            finmeasure = "Kilograms";
                            datareff1.setValue(calculatedvalue);
                            Toast.makeText(stockaddpageActivity.this, "KG : Added", Toast.LENGTH_SHORT).show();

                        }
                    }
                }
            }



        }
    }); 
}
}

尝试
finstockval2=dataSnapshot.getValue(Integer.class)onDataChange
中输入code>并通知我。@ChiragSavsani感谢您的建议。我犯了很多错误。一个是我的朋友做的,他在代码中将变量设置为0,所以我把它注释掉了。第二个问题是,我调用了datasnapshot,在创建时只更改了一次,因此当应用程序启动并获取数据时,它将只工作一次。(这导致获取新数据时,我必须重新启动应用程序)…相反,我调用了两次..oncreate和addstock click事件,因此我获得了两个事件的更新数据。最好将代码和结构作为文本,而不是链接和图像。要获取Firebase结构,请使用Firebase控制台->导出JSON,然后复制并粘贴结构片段。参见Try
finstockval2=dataSnapshot.getValue(Integer.class)onDataChange
中输入code>并通知我。@ChiragSavsani感谢您的建议。我犯了很多错误。一个是我的朋友做的,他在代码中将变量设置为0,所以我把它注释掉了。第二个问题是,我调用了datasnapshot,在创建时只更改了一次,因此当应用程序启动并获取数据时,它将只工作一次。(这导致获取新数据时,我必须重新启动应用程序)…相反,我调用了两次..oncreate和addstock click事件,因此我获得了两个事件的更新数据。最好将代码和结构作为文本,而不是链接和图像。要获取Firebase结构,请使用Firebase控制台->导出JSON,然后复制并粘贴结构片段。看见