2017-04-13 14 views
0

我的代碼如下所示:如下圖所示火力地堡onDataChange方法不叫即使數據發生變化

private DatabaseReference mFirebaseDatabase; 
    private FirebaseDatabase mFirebaseInstance; 
    private static final String TAG = "OrderManagementFragment"; 


    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_order_managment, container, false); 

     //get reference to the orders node 
     mFirebaseDatabase = mFirebaseInstance.getReference("orders"); 

     // app_title change listener 
     mFirebaseInstance.getReference("58ca237b2e2c211dc0c7ed9b").addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       Toast.makeText(getActivity(), dataSnapshot.getValue(String.class), Toast.LENGTH_LONG).show(); 
       Log.d(TAG, "onDataChange: " + dataSnapshot.getValue(String.class)); 


      } 

      @Override 
      public void onCancelled(DatabaseError error) { 
       // Failed to read value 
       Toast.makeText(getActivity(), error.getMessage(), Toast.LENGTH_LONG).show(); 
       Log.d(TAG, "onCancelled: " + error.getMessage()); 
      } 
     }); 

     return view; 
    } 

我對火力的憑據:

firebase schema

現在,這裏發生的是,無論何時數據從後端改變,onDatachange方法永遠不會被調用。所以在這個方法中有什麼缺失?

我正在測試通過android模擬器,這是它的問題?

+0

您將您的聽衆附加到錯誤的位置。將其更改爲'mFirebaseDatabase.child( 「58ca237b2e2c211dc0c7ed9b」)addValueEventListener(新ValueEventListener(){' –

回答

2

我改變了你的代碼,你不需要引用inconstructor因爲應用方法會知道你需要什麼。

數據沒有改變,因爲你的佈局沒有靜態的textView。當你有一個麪包,其啓動一旦你還是你不能看到它的改變

//get reference to the orders node 
      mFirebaseDatabase = mFirebaseInstance.getReference(); 

      // app_title change listener 
      mFirebaseInstance.addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        Toast.makeText(getActivity(), dataSnapshot.child("YOUR REFERENCE HERE")getValue(String.class), Toast.LENGTH_LONG).show(); 

       } 

我給你從我的應用實例:

mDatabase = FirebaseDatabase.getInstance().getReference(); 
     settingsText2.setText("Loading..."); 
     mDatabase.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(final DataSnapshot dataSnapshot) { 
       settingsTextWithScrollView.setText(dataSnapshot.child("Youtube1").child("Text").getValue(String.class)); 
       settingsText2.setText(dataSnapshot.child("Youtube1").child("Information").getValue(String.class)); 
       settingsTextWithScrollView.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         openYoutubeIntent(dataSnapshot.child("Youtube1").child("Link").getValue(String.class)); 
        } 
       }); 
       settingsText3.setText(dataSnapshot.child("Youtube2").child("Text").getValue(String.class)); 
       settingsText4.setText(dataSnapshot.child("Youtube2").child("Information").getValue(String.class)); 
       settingsText3.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         openYoutubeIntent(dataSnapshot.child("Youtube2").child("Link").getValue(String.class)); 
        } 
       }); 
       settingsText5.setText(dataSnapshot.child("Youtube3").child("Text").getValue(String.class)); 
       settingsText6.setText(dataSnapshot.child("Youtube3").child("Information").getValue(String.class)); 
       settingsText5.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         openYoutubeIntent(dataSnapshot.child("Youtube3").child("Link").getValue(String.class)); 
        } 
       }); 
      } 
      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 
    } 
+0

Log.d(TAG, 「onDataChange:」。+ dataSnapshot.child( 「訂單」)子( 「58ca237b2e2c211dc0c7ed9b」)。 child(「order_status」)。getValue(String.class))給我空值爲我的架構 –

+0

刪除此:.child(「order_stat我們」) – Rodriquez

+0

不,它仍然給我空值 –

0

它是一個靜態調用像這樣

FirebaseDatabase database=FirebaseDatabase.getInstance(); 
DataBaseRefrence dbRef=database.getRefrence("nodeOfData"); 
DataSnapshot ds=dbRef.getChildren("gettingWhatIsInNodeOfData"); or 
better yet chain them DataSnapshot 
ds=FirebaseDatabase.getInstance().getRefrence("orders").getChildren(); 
+0

如果您還有併發問題你設置一些等於數據庫值的變量,然後嘗試用它做些事情 – Pomagranite