Проблема с Android Studio и Firebase - PullRequest
0 голосов
/ 06 декабря 2018

Моя база данных выглядит следующим образом

enter image description here

Меня зовут Ананд, я создал приложение и использовал навигацию снизу. Используются фрагменты.в одном я использовал для отображения курсов (pdf-файлы). Я хочу отображать только определенные курсы для конкретного пользователя, то есть когда пользователь, регистрирующийся, вынуждает выбрать курс.В соответствии с названием курса, который они выбрали, они должны получить только этот конкретный pdf-файл. Согласно моему текущему коду, он показывает все, и мне нужно только показать его в соответствии с названием курса и курсом пользователя .my code, указанный ниже

enterкод здесь

public class CourseFragment extends android.support.v4.app.Fragment {
//the listview
ListView listView;

//database reference to get uploads data
DatabaseReference mDatabaseReference;

//list to store uploads data
List<Upload> uploadList;

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.activity_course_fragment, null);

    uploadList = new ArrayList<>();
    listView = (ListView) v. findViewById(R.id.listView);
    final  WebView webView= (WebView) v. findViewById(R.id.webview);

       //adding a clicklistener on listview
       listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
           @Override
           public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
               //getting the upload
               Upload upload = uploadList.get(i);

               //Opening the upload file in browser using the upload url
               Intent intent = new Intent(Intent.ACTION_VIEW);
               intent.setData(Uri.parse(upload.getUrl()));
               startActivity(intent);

           }
       });


    //getting the database reference
    mDatabaseReference = FirebaseDatabase.getInstance().getReference(Constants.DATABASE_PATH_UPLOADS);

    //retrieving upload data from firebase database
    mDatabaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                Upload upload = postSnapshot.getValue(Upload.class);
                uploadList.add(upload);
            }

            String[] uploads = new String[uploadList.size()];

            for (int i = 0; i < uploads.length; i++) {
                uploads[i] = uploadList.get(i).getName();
            }

            //displaying it to list
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_1, uploads);
            listView.setAdapter(adapter);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
    return v;
}

1 Ответ

0 голосов
/ 06 декабря 2018

Чтобы решить эту проблему, используйте следующие строки кода:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query usersQuery = rootRef.child("Users").orderByChild("name").equalTo("ANAND");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String course = ds.child("course").getValue(String.class);
            Log.d(TAG, course);

            Query courseRef = rootRef.child("Course").orderByChild("name").equalTo(course);
            ValueEventListener eventListener = new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for(DataSnapshot ds : dataSnapshot.getChildren()) {
                        String name = ds.child("name").getValue(String.class);
                        String url = ds.child("url").getValue(String.class);
                        Log.d(TAG, name + " / " + url);
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                    Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
                }
            };
            courseRef.addListenerForSingleValueEvent(eventListener);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
usersQuery.addListenerForSingleValueEvent(valueEventListener);

Логика этого запроса следующая: сначала мы запрашиваем базу данных, чтобы найти пользователя с именем ANAND, затемполучить соответствующее название курса.Имея название курса, мы можем запросить базу данных, чтобы получить соответствующий URL / имя соответствующего курса.Таким образом, в этом случае вывод в logcat будет:

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