Как получить данные в FireBase? - PullRequest
0 голосов
/ 10 июня 2018

Структура моей базы данных

enter image description here

Я пытаюсь создать действие, в котором я могу отображать все журналы.Просто отметка времени и сообщение журнала.Я попытался с FirebaseUI и адаптером, но я не могу получить данные для отображения.Лучшее, что я сделал, это разместил один и тот же последний журнал на всех позицияхЭто то, что у меня пока, но безуспешно.Я новичок в Firebase и все, что мне нужно, это отображать журналы в списке.Это может быть lisView или recyclerView.Если кто-нибудь может помочь мне с кодом или примером.Спасибо.

Структура базы данных | "logs" node / userId / logId / fields |

    public class LogActivity extends AppCompatActivity {
    private static final String TAG = "LogActivity";
    private static final int ACTIVITY_NUM = 3;

    //widgets
    private Context mContext = LogActivity.this;
    private RecyclerView mLogRecycleView;
    private TextView timeStamp, log;

    //firebase
    private DatabaseReference mLogDatabase;
    private FirebaseAuth mAuth;

    //adapter
    private FirebaseRecyclerAdapter adapter;

    //vars
    private String mCurrentUserID, logID;
    List<AppLogs> logsList = new ArrayList<>();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_log);
        Log.d(TAG, "onCreate: Started");

        mCurrentUserID = FirebaseAuth.getInstance().getCurrentUser().getUid();

        mLogRecycleView = findViewById(R.id.recyclerList);
        mLogDatabase = FirebaseDatabase.getInstance().getReference().child("logs").child(mCurrentUserID);

        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);

        mLogRecycleView.setHasFixedSize(true);
        mLogRecycleView.setLayoutManager(linearLayoutManager);

        firebaseListAdapter();

        mLogRecycleView.setAdapter(adapter);

        setupBottomNavigationView();
    }

    @Override
    protected void onStart() {
        super.onStart();
        adapter.startListening();
    }

    @Override
    protected void onStop() {
        super.onStop();
        adapter.stopListening();
    }

    private void firebaseListAdapter() {
        Log.d(TAG, "firebaseListAdapter: started");

        Query logQuery = mLogDatabase.orderByChild("time");

        FirebaseRecyclerOptions<AppLogs> options =
                new FirebaseRecyclerOptions.Builder<AppLogs>()
                .setQuery(logQuery, AppLogs.class).build();

        adapter = new FirebaseRecyclerAdapter<AppLogs, LogViewHolder>(options) {
            @Override
            protected void onBindViewHolder(@NonNull final LogViewHolder holder, int position, @NonNull AppLogs model) {
                Log.d(TAG, "onBindViewHolder: started");

                //get the ID of the messages
                //final String logID = getRef(position).getKey();
                //Log.d(TAG, "onBindViewHolder: logID : " + logID);



                Query logQuery = mLogDatabase;


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

                        for (DataSnapshot singData : dataSnapshot.getChildren()) {
                            //AppLogs logs = dataSnapshot.getValue(AppLogs.class);
                            Log.d(TAG, "onChildAdded: log:==== " + singData.child("log").getValue());
                            //Log.d(TAG, "onChildAdded: log_ID:==== " + logs.getLog_id());


                            String log =  singData.child("log").getValue().toString();
//                        String timeStamp = Long.toString(logs.getTime());
//
                        holder.setLog(log);
//                        holder.setTimeStamp(timeStamp);
                        }

                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });




            }

            @NonNull
            @Override
            public LogViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                Log.d(TAG, "onCreateViewHolder: create users view holder: ");
                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.layout_log_list_view, parent, false);
                return new LogViewHolder(view);
            }
        };

    }

    public static class LogViewHolder extends RecyclerView.ViewHolder {

        View mView;

        public LogViewHolder(View itemView) {
            super(itemView);
            this.mView = itemView;
        }

        public void setLog(String log) {
            TextView tvLog = mView.findViewById(R.id.tvLog);
            tvLog.setText(log);
        }

        public void setTimeStamp(String timeStamp) {
            TextView tvTimeStamp = mView.findViewById(R.id.tvTimeStamp);
            tvTimeStamp.setText(timeStamp);
        }
    }



    /*
     *BottomNavigationView Setup
     */
    private void setupBottomNavigationView() {
        Log.d(TAG, "setupBottomNavigationView: setting up BottomNavigationView");
        BottomNavigationViewEx bottomNavigationViewEx = (BottomNavigationViewEx) findViewById(R.id.bottomNavViewBar);
        BottomNavigationViewHelper.setupBottomNavigationView(bottomNavigationViewEx);
        BottomNavigationViewHelper.enableNavigation(mContext, this, bottomNavigationViewEx);
        Menu menu = bottomNavigationViewEx.getMenu();
        MenuItem menuItem = menu.getItem(ACTIVITY_NUM);
        menuItem.setChecked(true);
    }
}

и мой класс модели журнала

package com.logistics.alucard.socialnetwork.Models;

открытый класс AppLogs {

private String log, log_id;
private long time;

public AppLogs(String log, String log_id, long time) {
    this.log = log;
    this.log_id = log_id;
    this.time = time;
}

public AppLogs() {
}

public String getLog() {
    return log;
}

public void setLog(String log) {
    this.log = log;
}

public String getLog_id() {
    return log_id;
}

public void setLog_id(String log_id) {
    this.log_id = log_id;
}

public long getTime() {
    return time;
}

public void setTime(long time) {
    this.time = time;
}
}

1 Ответ

0 голосов
/ 10 июня 2018

Мне удается это понять!Спасибо за помощь.Все еще немного сбивает с толку, как строить запросы, но я постараюсь поправиться:)

Это мое решение для firebase извлечения данных:

protected void onBindViewHolder(@NonNull final LogViewHolder holder, int position, @NonNull AppLogs model) {
            Log.d(TAG, "onBindViewHolder: started");

            //get the ID of the messages
            final String logID = getRef(position).getKey();
            //Log.d(TAG, "onBindViewHolder: logID : " + logID);



            Query logQuery = mLogDatabase;


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


                   //AppLogs appLogs = dataSnapshot.getValue(AppLogs.class);
                    //Log.d(TAG, "onDataChange: logs:---------" + dataSnapshot.child(logID).child("log").getValue());
                    String log = dataSnapshot.child(logID).child("log").getValue().toString();
                    String timeStamp = dataSnapshot.child(logID).child("time").getValue().toString();
                    Log.d(TAG, "onDataChange: logs:--------------" + log);

                    holder.setLog(log);
                    holder.setTimeStamp(timeStamp);

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
...