Android Studio AddValueEventListener не работает - PullRequest
0 голосов
/ 23 сентября 2019

Я хочу сделать обзор переработчика по данным из firebase.Моя база данных Firebase выглядит следующим образом.


enter image description here

Однако моему коду не удалось передать данные в утилитационный просмотр.и я провел много раз там, где проблема.и это похоже на проблему addValueEventListenr.Я не знаю почему, но этот слушатель не работает.

Класс адаптера

public class SymbolAdapter extends RecyclerView.Adapter<SymbolAdapter.SymbolHolder>{

  ArrayList<Symbol> symbol_list;
    public SymbolAdapter(ArrayList<Symbol> symbol_list){
        this.symbol_list = symbol_list;
    }
    @NonNull
    @Override
    public SymbolHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.search_item, parent, false);
        return new SymbolHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull SymbolHolder holder, int position) {
        Symbol symbol = symbol_list.get(position);
        holder.symbol.setText(symbol.getSymbol());
        holder.companyName.setText(symbol.getCompanyName());
    }

    @Override
    public int getItemCount() {
        return symbol_list.size();
    }

    class SymbolHolder extends RecyclerView.ViewHolder {
        TextView symbol, companyName;
        public SymbolHolder(@NonNull View itemView){
            super(itemView);
            symbol = itemView.findViewById(R.id.symbol);
            companyName = itemView.findViewById(R.id.companyName);
        }
    }
}

Класс символов

public class Symbol {
    private String symbol;
    private String companyName;

    public Symbol(){

    }
    public Symbol(String symbol, String companyName){
        this.symbol = symbol;
        this.companyName = companyName;
    }
    public String getSymbol() {
        return symbol;
    }

    public void setSymbol(String symbol) {
        this.symbol = symbol;
    }

    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }
}

Фрагмент поиска

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

         recyclerView = view.findViewById(R.id.search_item_recylerView);
         recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
         recyclerView.setHasFixedSize(true);
         list = new ArrayList<>();

        ref= FirebaseDatabase.getInstance().getReference();
        ref.addValueEventListener(new ValueEventListener() {
             @Override
             public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                 Log.d("symbol", "executing? ");

                 if(dataSnapshot.exists()){
                     for (DataSnapshot ds : dataSnapshot.getChildren()){
                         Symbol s =ds.getValue(Symbol.class);
                         Log.d("symbol", s.getSymbol());
                         Log.d("symbol", s.getCompanyName());
                         list.add(s);
                     }
                     madapter= new SymbolAdapter(list);
                     recyclerView.setAdapter(madapter);
                 }
             }

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

             }
         });
        return view;
    }

Когда я запускаю, все журналы, которые я помещаю в addValueEventListener, не достигают.Это из-за соединения с firebase?Я установил для своего правила базы данных значение true для чтения.и я добавил в андроид манифест.Тем не менее, это все еще не работает.и я проверил соединение с

DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected");
        connectedRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                boolean connected = snapshot.getValue(Boolean.class);
                if (connected) {
                    Log.d("symbol", "connected");
                } else {
                    Log.d("symbol", "not connected");
                }
            }

Затем addValueEventListener Look достигает onDataChange, но «не подключен» печатается, даже если я добавил в манифест.

Большое спасибо

1 Ответ

0 голосов
/ 23 сентября 2019

Если not connected напечатан с вашего слушателя на .info/connected, это означает, что ваше приложение не подключено к серверу базы данных Firebase.Поскольку это так, другие ваши обработчики не смогут получать данные с сервера, и их onDataChange не сработает.

Чтобы решить эту проблему, вам нужно выяснить,почему клиент Firebase не может подключиться к серверу.Обычно это связано с подключением к Интернету на вашем устройстве / эмуляторе или между клиентом и сервером, блокирующим трафик.Если причина не очевидна из вывода logcat, рассмотрите возможность включения ведения журнала отладки в клиенте Firebase, чтобы увидеть подробный вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...