2017-04-09 13 views
0

我的代码将逐行处理,而不会等待从数据库加载的值, 我的意思是,如果它在步骤1处于当前状态并尝试从数据库获取数据,则它将移动到另一个步骤2同时仍数据不完全地取 任何一个可以帮助我解决这个问题很快等待在处理之前加载数据

private List<ContactInfo> Go(final List<ContactInfo> result) { 

    myRef1 = FirebaseDatabase.getInstance().getReference().child("0532").child("TL"); 


    myRef1.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      final long[] pendingLoadCount = { dataSnapshot.getChildrenCount() }; 
      for (DataSnapshot itemSnapshot: dataSnapshot.getChildren()){ 

       Log.v("ABCD", itemSnapshot.getValue().toString()); 
       value = itemSnapshot.getValue().toString(); 
       // String parts[] = value.split("#"); 
       final ContactInfo ci = new ContactInfo(); 
       ci.name = value; 
       Query myRef2 = FirebaseDatabase.getInstance().getReference().child("0532").child(DD).child(value); 
       myRef2.addListenerForSingleValueEvent(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 

         Map<String ,Object> key = (Map<String, Object>) dataSnapshot.getValue(); 

         if(dataSnapshot.hasChild("settime")) 
         { 
         //  Log.v("ABCD", dataSnapshot.getValue().toString()); 
          // Log.v("ABCD", key.values().toString()); 
          ci_surname = (String) key.get("settime"); 
          ci_email = (String) key.get("settime"); 
          ci_title = (String) key.get("settime"); 


           Log.v("ABCD", "Nothing found 2"+ci_surname); 
           ci.surname = ci_surname ; 
           ci.email = ci_email ; 
           ci.title = ci_title; 
           result.add(ci); 

         } else{ 
          Log.v("ABCD", "Nothing found 2"+ci_surname); 
          ci.surname = "ABCD" ; 
          ci.email = "XYZ" ; 
          ci.title = "FFF"; 
          result.add(ci); 
         } 

        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 
       }); 
       pendingLoadCount[0] = pendingLoadCount[0] - 1; 
       if (pendingLoadCount[0] == 0) { 
        Log.v("ABCD", "Nothing found"); 

        recList.setAdapter(ca); 
       } 

      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
    return result; 
} 

回答

0

火力地堡中的AsyncTask运行,因此您不必使用另一AsynTask

和是ST方式等是使用ProgressDialog

突然想到说你有这个功能,返回progressdialog

private ProgressDialog MyProgressDialog() { 
      final ProgressDialog progressDialog = new ProgressDialog(getActivity()); 
      progressDialog.setMessage("loading ..."); 
      progressDialog.setCancelable(false); 
      progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
      return progressDialog; 
     } 

,然后用它

 final ProgressDialog myownpd = MyProgressDialog(); 

,并在您Load_data_from_firebase功能

private List<ContactInfo> Go(final List<ContactInfo> result) { 
      myownpd.show(); 

    myRef1 = FirebaseDatabase.getInstance().getReference().child("0532").child("TL"); 


    myRef1.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      final long[] pendingLoadCount = { dataSnapshot.getChildrenCount() }; 
      for (DataSnapshot itemSnapshot: dataSnapshot.getChildren()){ 

       Log.v("ABCD", itemSnapshot.getValue().toString()); 
       value = itemSnapshot.getValue().toString(); 
       // String parts[] = value.split("#"); 
       final ContactInfo ci = new ContactInfo(); 
       ci.name = value; 
       Query myRef2 = FirebaseDatabase.getInstance().getReference().child("0532").child(DD).child(value); 
       myRef2.addListenerForSingleValueEvent(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 

         Map<String ,Object> key = (Map<String, Object>) dataSnapshot.getValue(); 

         if(dataSnapshot.hasChild("settime")) 
         { 
         //  Log.v("ABCD", dataSnapshot.getValue().toString()); 
          // Log.v("ABCD", key.values().toString()); 
          ci_surname = (String) key.get("settime"); 
          ci_email = (String) key.get("settime"); 
          ci_title = (String) key.get("settime"); 


           Log.v("ABCD", "Nothing found 2"+ci_surname); 
           ci.surname = ci_surname ; 
           ci.email = ci_email ; 
           ci.title = ci_title; 
           result.add(ci); 

         } else{ 
          Log.v("ABCD", "Nothing found 2"+ci_surname); 
          ci.surname = "ABCD" ; 
          ci.email = "XYZ" ; 
          ci.title = "FFF"; 
          result.add(ci); 
         } 

        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 
       }); 
       pendingLoadCount[0] = pendingLoadCount[0] - 1; 
       if (pendingLoadCount[0] == 0) { 
        Log.v("ABCD", "Nothing found"); 

        recList.setAdapter(ca); 
       } 
           myownpd.cancel(); 

      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
           myownpd.cancel(); 

     } 
    }); 
    return result; 
} 
+0

谢谢,但不工作 – sunny

相关问题