簡體   English   中英

在將其保存到數據庫之前如何將先前的值與當前值進行比較?

[英]How to compare previous value with current value before saving it to database?

Firebase 數據庫圖像我正在制作一個 IoT 應用程序,其中我使用實時數據庫顯示傳感器的價值並將其保存到數據庫 class。

但我不希望任何兩個連續的值相同。

在將其保存到數據庫類之前,如何將先前的值與當前值進行比較。

confirm2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
    // Get your custom_toast.xml layout
    LayoutInflater inflater = getLayoutInflater();

    final View layout = inflater.inflate(R.layout.custom_toast,
            (ViewGroup) findViewById(R.id.custom_toast_layout_id));

    //Initializing the text views
    EditText editText =  findViewById(R.id.link2);
    final String link2 = editText.getText().toString();

    EditText editText1 =  findViewById(R.id.idvalue);
    final String StringValue = editText1.getText().toString();


    //Adding functionality to the text views
    fire2 = new Firebase("https://iot.firebaseio.com/");
    Firebase fireChild = fire2.child(link2+"/S1");
    fireChild.setValue("7");

    // Read from the database
    myRef = FirebaseDatabase.getInstance().getReference();
    myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            // This method is called once with the initial value and again
            // whenever data at this location is updated.

            if(StringValue.length()>0 && link2.length()>0) {
                try {
                status = dataSnapshot.child(link2 + "/Analog2").getValue().toString();}
                catch (NullPointerException ignored){}

                if(status==null){
                    TextView text4 = layout.findViewById(R.id.text4);
                    text4.setText(" Error: Wrong ID. ");
                    // Toast...
                    Toast toast = new Toast(getApplicationContext());
                    toast.setGravity(Gravity.CENTER_VERTICAL, 0, 540);
                    toast.setDuration(Toast.LENGTH_LONG);
                    toast.setView(layout);
                    toast.show();
                    return;
                }
                else {
                    analogvalue = Integer.parseInt(status);
                    pin.setText(status);
                    String status2=status;
                    mDatabaseHelper.addData("Date: " + Date + "   Value: "+status);
                }
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {
            // Failed to read value
            // Log.w(TAG, "Failed to read value.", error.toException());
        }
    });

您可以在參考中存儲兩個值:

prevVal 和 currentVal,例如:

Object:
 {
    "value": currentVal,
    "prev_value": prevVal
 }

ref.setValue(value: „x”);

然后在 addValueListener 中:

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

              previousValue = snapshot.val().prevVal;
              newValue = snapshot.val().value;

                //then compare -> e.g. compareShomehow(previousVal, newVal)
                //then save to db
                //then update previousValue -> ref.setValue(prev_value:newValue);


 }

經過大量的試驗和錯誤,我找到了解決這個問題的方法。 首先,保存來自數據庫的值,然后定義一個長度為 2 的數組,並將數據庫中的值保存到數組的 1 索引,然后交換數組的值,然后比較數組的值,例如:

status = dataSnapshot.child(link2 + "/Analog2").getValue().toString();}
val1 = [prev,curr]

val1[1] = status
val1[1],val1[0] = val1[0],val1[1]

if val1[0]!=val1[1]:
  //Do something

當特定節點的值發生變化時,這將起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM