2017-01-27 2 views
0

addListenerForSingleValueEvent не выполняется вообще. При запуске отладчика он не извлекает данные из базы данных. Я даже попробовал addValueEventListener, но бесполезно.addListenerForSingleValueEvent не исполняется

Я добавил код для фрагмента, на котором я пытаюсь выполнить это.

package com.example.visan.peds; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Toast; 

import com.google.firebase.database.DataSnapshot; 
import com.google.firebase.database.DatabaseError; 
import com.google.firebase.database.DatabaseReference; 
import com.google.firebase.database.FirebaseDatabase; 
import com.google.firebase.database.ValueEventListener; 

import java.util.ArrayList; 
import java.util.List; 


public class Landing_mother extends Fragment { 

    private List<Ailment> ailments; 

    private RecyclerView recyclerView; 
    LinearLayoutManager layoutManager; 
    private RecyclerView.Adapter adapter; 

    public Landing_mother(){} 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

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

     ailments=new ArrayList<>(); 

     recyclerView =(RecyclerView)view.findViewById(R.id.recyclerView1); 
     recyclerView.setHasFixedSize(true); 

     layoutManager=new LinearLayoutManager(getActivity()); 
     layoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
     recyclerView.setLayoutManager(layoutManager); 

     getData(); 

     adapter=new LandingAdapter(ailments,getActivity()); 

     recyclerView.setAdapter(adapter); 
     return view; 
    } 

    private void getData(){ 
     FirebaseDatabase db=FirebaseDatabase.getInstance(); 
     DatabaseReference ref=db.getReference().child("Mother"); 

     if(ref!=null){ 
      ref.addListenerForSingleValueEvent(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        if (dataSnapshot.exists()){ 
         Ailment ailment=new Ailment(); 
         for (int i=0;i<dataSnapshot.getChildrenCount();i++){ 
          String img=dataSnapshot.child(Integer.toString(i)).child("img").getValue(String.class); 
          ailment.setImage_url(img); 
          String name=dataSnapshot.child(Integer.toString(i)).child("name").getValue(String.class); 
          ailment.setName(name); 
          ailments.add(ailment); 
         } 
        } 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 
     }else { 
      Toast.makeText(getActivity(),"Reference not obtained",Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

ответ

0

Обратите внимание, что onDataChange не является частью основного потока. Вы вызываете getData() и считаете, что значения извлекаются из базы данных сразу, после чего вы устанавливаете адаптер. Но на самом деле, onDataChange, вероятно, срабатывает позже. Попробуйте использовать setadapter или notifydatasethasanged в методе onDataChange.

Смежные вопросы