recycleView passaggio con firebase in Android Studio

Stato
Discussione chiusa ad ulteriori risposte.

sare1234

Utente Attivo
262
3
Salve, ho un problema, ho realizzato un rerecycleView con una serie di CardView ora quando clicco su una di essa devo fare in modo che si apra un'altra schermata contenente una serie di dettagli ho fatto così:

Adapter:

Java:
public class AdapterListItinerary extends RecyclerView.Adapter<AdapterListItinerary.HolderListItinerary> {

    private Context context;
    private List<Itinerary> itineraryList;

    public AdapterListItinerary(Context context, List<Itinerary> itineraryList) {
        this.context = context;
        this.itineraryList = itineraryList;
    }

    @NonNull
    @Override
    public HolderListItinerary onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_itinerary, parent, false);
        return new HolderListItinerary(view);
    }

    private StartActivity startActivity;

    @Override
    public void onBindViewHolder(@NonNull AdapterListItinerary.HolderListItinerary holder, int position) {

        String titleItinerary = itineraryList.get(position).getTitleItinerary();
        holder.title_row_itinerary.setText(titleItinerary);

        String email = itineraryList.get(position).getEmail();
        holder.email_user_row_itinerary.setText(email);

       
        holder.progressBar_row_itinerary.setVisibility(View.VISIBLE);

        try {
            Picasso.get().load(itineraryList.get(position).getImage_itinerary())
                    .placeholder(R.drawable.ic_launcher_foreground)
                    .into(holder.imageView_row_itinerary, new com.squareup.picasso.Callback() {
                        @Override
                        public void onSuccess() {
                            holder.progressBar_row_itinerary.setVisibility(View.GONE);
                        }

                        @Override
                        public void onError(Exception e) {
                            Toast.makeText(context, "Impossibile caricare una delle immagini" + e.getMessage(), Toast.LENGTH_SHORT).show();
                            holder.progressBar_row_itinerary.setVisibility(View.GONE);

                        }
                    });

        } catch (Exception e) {

        }
        

        holder.itemView.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view){
                
                Fragment fg = new DetailsItinerary_fragment(startActivity);
                FragmentManager fm = ((AppCompatActivity)context).getSupportFragmentManager();
                FragmentTransaction ft = fm.beginTransaction();
                ft.add(R.id.activity_main,fg).addToBackStack(null).commit();
            }
        });
    }

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

    class HolderListItinerary extends RecyclerView.ViewHolder {

        ImageView imageView_row_itinerary;
        ProgressBar progressBar_row_itinerary;
        TextView title_row_itinerary;
        TextView email_user_row_itinerary;
        

        public HolderListItinerary(@NonNull View itemView) {
            super(itemView);

            imageView_row_itinerary = itemView.findViewById(R.id.imageView_row_itinerary);
            progressBar_row_itinerary = itemView.findViewById(R.id.progressBar_row_itinerary);
            title_row_itinerary = itemView.findViewById(R.id.title_row_itinerary);
            email_user_row_itinerary = itemView.findViewById(R.id.email_user_row_itinerary);
            
        }
    }
}

}

Schermata con i dettagli:
Java:
public class DetailsItinerary_fragment extends Fragment {

    private final StartActivity startActivity;
    private ImageButton buttonBackDetailsItinerary;
    private Button buttonInsertReviews;
    private Button buttonViewsReviews;
    List<Itinerary> itineraryList;
    private DetailsItinerary_presenter detailsItinerary_presenter;
    private Explore_fragment explore_fragment;

    TextView title_details_itinerary;
    TextView hours_details_Itinerary;
    TextView minutes_details_Itinerary;
    TextView seconds_details_Itinerary;
    TextView difficultLivel_details_Itinerary;
    TextView description_detailsItinerary;
    ImageView imageView_details_itinerary;
    ProgressBar progressBar_details_itinerary;

    String itineraryId;

    public DetailsItinerary_fragment(StartActivity startActivity) {
        this.startActivity = startActivity;
    }

    public StartActivity getStartActivity() {
        return startActivity;
    }

    @SuppressLint("MissingInflatedId")
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_details_itinerary, container, false);

        buttonBackDetailsItinerary = view.findViewById(R.id.back_detailsItinerary);
        buttonInsertReviews = view.findViewById(R.id.button_insert_review);
        buttonViewsReviews = view.findViewById(R.id.button_views_review);
        title_details_itinerary = view.findViewById(R.id.title_details_itinerary);
        hours_details_Itinerary = view.findViewById(R.id.hours_details_Itinerary);
        minutes_details_Itinerary = view.findViewById(R.id.minutes_details_Itinerary);
        difficultLivel_details_Itinerary = view.findViewById(R.id.difficultLivel_details_Itinerary);
        description_detailsItinerary = view.findViewById(R.id.description_detailsItinerary);
        seconds_details_Itinerary = view.findViewById(R.id.seconds_details_Itinerary);
        imageView_details_itinerary = view.findViewById(R.id.imageView_details_itinerary);
        progressBar_details_itinerary = view.findViewById(R.id.progressBar_details_itinerary);

       Intent intent = getActivity().getIntent();
       itineraryId = intent.getStringExtra("itineraryId");

        detailsItinerary_presenter = new DetailsItinerary_presenter(this);
        listenToClickEvents();
        loadItineraryDetails();
        return view;
    }


    private void listenToClickEvents() {
        buttonBackDetailsItinerary.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                detailsItinerary_presenter.onButtonBackDetailsItineraryClicked();
            }
        });
        buttonInsertReviews.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                detailsItinerary_presenter.onButtonInsertReviewsClicked();
            }
        });
        buttonViewsReviews.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                detailsItinerary_presenter.onButtonViewsReviewsClicked();
            }
        });
    }

  /*  private void loadItineraryDetails() {
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference referenceDb = database.getReference("Itinerary");

        itineraryList = new ArrayList<>();

        Itinerary itinerary = new Itinerary();

        itineraryList.clear();

        referenceDb.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                Iterable<DataSnapshot> dataSnapsho1 = snapshot.getChildren();

                for (DataSnapshot ds : dataSnapsho1) {

                    if (ds.child("titleItinerary").getValue() != null) {
                        Itinerary itinerary = new Itinerary(
                                (String) ds.child("titleItinerary").getValue(),
                                (String) ds.child("descriptionItinerary").getValue(),
                                (String) ds.child("difficultyLevel").getValue(),
                                (String) ds.child("hours").getValue(),
                                (String) ds.child("minutes").getValue(),
                                (String) ds.child("seconds").getValue(),
                                String.valueOf(ds.child("image").getValue()));
                        itineraryList.add(itinerary);
                    }
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });
    }*/


    private void loadItineraryDetails() {
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference referenceDb = database.getReference("Itinerary");

        referenceDb.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                String titleItinerary = "" + snapshot.child("titleItinerary").getValue();
                String descriptionItinerary = "" + snapshot.child("descriptionItinerary").getValue();
                String difficultyLevel = "" + snapshot.child("difficultyLevel").getValue();
                String hours = "" + snapshot.child("hours").getValue();
                String minutes = "" + snapshot.child("minutes").getValue();
                String seconds = "" + snapshot.child("seconds").getValue();
                String image = "" + snapshot.child("image").getValue();

                title_details_itinerary.setText(titleItinerary);
                description_detailsItinerary.setText(descriptionItinerary);
                difficultLivel_details_Itinerary.setText(difficultyLevel);
                hours_details_Itinerary.setText(hours);
                minutes_details_Itinerary.setText(minutes);
                seconds_details_Itinerary.setText(seconds);
                seconds_details_Itinerary.setText(seconds);
                imageView_details_itinerary.setImageURI(Uri.parse(image));
            }

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

            }
        });
    }

Layout:
Codice:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/fragment_details_itinerary"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:background="@drawable/sfondo"
    android:gravity="center"
    tools:context=".view.fragment.DetailsItinerary_fragment">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="?actionBarSize"
        android:background="@drawable/shape_toolbar">

        <ImageButton
            android:id="@+id/back_detailsItinerary"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginStart="14dp"
            android:background="@color/transparent"
            android:src="@drawable/ic_back_explore" />

        <TextView
            android:id="@+id/title_DetailsItinerary"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignParentEnd="true"
            android:layout_marginTop="5dp"
            android:layout_marginEnd="172dp"
            android:text="@string/fragment_detailsItinerary_textView_title"
            android:textColor="@color/white"
            android:textSize="16sp"
            android:textStyle="bold">

        </TextView>

        <TextView
            android:id="@+id/subTitle_DetailsItinerary"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentBottom="true"
            android:layout_marginTop="15dp"
            android:layout_marginEnd="150dp"
            android:layout_marginBottom="8dp"
            android:text="@string/fragment_detailsItinerary_textView_subTitle"
            android:textColor="@color/white"
            android:textSize="16sp">

        </TextView>

    </RelativeLayout>

    <ScrollView
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="676dp"
        android:layout_marginTop="55dp"
        android:padding="10dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <RelativeLayout
                android:id="@+id/details_itinerary"
                android:layout_width="match_parent"
                android:layout_height="196dp"
                android:layout_marginEnd="5dp"
                android:background="@color/grey">

                <ImageView
                    android:id="@+id/imageView_details_itinerary"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />

                <ProgressBar
                    android:id="@+id/progressBar_details_itinerary"
                    style="?android:attr/progressBarStyle"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_alignParentBottom="true"
                    android:layout_marginBottom="73dp"
                    android:visibility="gone" />

            </RelativeLayout>

            <TableLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/title_detailsItinerary"
                android:layout_marginTop="10dp"
                android:layout_toEndOf="@id/details_itinerary">

                <TableRow>

                    <TextView
                        android:id="@+id/hours_detailsItinerary"
                        style="@style/TextAppearance.MaterialComponents.Caption"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginEnd="5dp"
                        android:text="@string/fragment_detailsItinerary_textView_hours"
                        android:textSize="20sp" />

                    <TextView
                        android:id="@+id/hours_details_Itinerary"
                        style="@style/TextAppearance.MaterialComponents.Caption"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginEnd="5dp"
                        android:text="@string/fragment_detailsItinerary__insert_hours"
                        android:textSize="20sp" />

                </TableRow>

                <TableRow>

                    <TextView
                        android:id="@+id/minutes_detailsItinerary"
                        style="@style/TextAppearance.MaterialComponents.Caption"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginEnd="5dp"
                        android:text="@string/fragment_detailsItinerary_textView_minutes"
                        android:textSize="20sp" />

                    <TextView
                        android:id="@+id/minutes_details_Itinerary"
                        style="@style/TextAppearance.MaterialComponents.Caption"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginEnd="5dp"
                        android:text="@string/fragment_detailsItinerary__insert_minutes"
                        android:textSize="20sp" />

                </TableRow>

                <TableRow>

                    <TextView
                        android:id="@+id/seconds_detailsItinerary"
                        style="@style/TextAppearance.MaterialComponents.Caption"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginEnd="5dp"
                        android:text="@string/fragment_detailsItinerary_textView_seconds"
                        android:textSize="20sp" />

                    <TextView
                        android:id="@+id/seconds_details_Itinerary"
                        style="@style/TextAppearance.MaterialComponents.Caption"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginEnd="5dp"
                        android:text="@string/fragment_detailsItinerary__insert_seconds"
                        android:textSize="20sp" />

                </TableRow>

                <TableRow>

                    <TextView
                        android:id="@+id/difficultLivel_detailsItinerary"
                        style="@style/TextAppearance.MaterialComponents.Caption"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginEnd="5dp"
                        android:text="@string/fragment_detailsItinerary_textView_difficultLivel"
                        android:textSize="20sp" />

                    <TextView
                        android:id="@+id/difficultLivel_details_Itinerary"
                        style="@style/TextAppearance.MaterialComponents.Caption"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginEnd="5dp"
                        android:text="@string/fragment_detailsItinerary__insert_difficultLivel"
                        android:textSize="20sp" />

                </TableRow>

            </TableLayout>

            <TextView
                android:id="@+id/title_details_itinerary"
                style="@style/TextAppearance.MaterialComponents.Headline6"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="20dp"
                android:layout_toEndOf="@id/details_itinerary"
                android:gravity="center"
                android:text="@string/fragment_detailsItinerary_textView_titleItinerary"
                android:textSize="30sp" />

            <TextView
                android:id="@+id/description_detailsItinerary"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="@string/fragment_review_text_input_description"
                android:textSize="18sp" />

            <TextView
                android:id="@+id/map_detailsItinerary"
                style="@style/TextAppearance.MaterialComponents.Headline6"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="20dp"
                android:layout_toEndOf="@id/details_itinerary"
                android:gravity="center"
                android:text="@string/fragment_detailsItinerary_textView_map"
                android:textSize="30sp" />

            <org.osmdroid.views.MapView
                android:id="@+id/mapview"
                android:layout_width="377dp"
                android:layout_height="222dp"
                android:layout_marginStart="10dp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintHorizontal_bias="0.492"
                app:layout_constraintVertical_bias="0.62">

            </org.osmdroid.views.MapView>

            <!-- MAPPA PER ITINERARIO-->

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="27dp"
                android:orientation="horizontal"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.493"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/mapview"
                app:layout_constraintVertical_bias="0.217"
                tools:ignore="MissingConstraints">

                <Button
                    android:id="@+id/button_views_review"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_margin="15dp"
                    android:gravity="center"
                    android:text="@string/fragment_detailsItinerary_button_views_review"
                    android:textAllCaps="false"
                    android:textColor="@color/white"
                    android:textIsSelectable="false"
                    android:textSize="16sp"
                    android:textStyle="normal"
                    app:backgroundTint="#8668A136"
                    app:cornerRadius="25dp">

                </Button>

                <Button
                    android:id="@+id/button_insert_review"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_margin="15dp"
                    android:gravity="center"
                    android:text="@string/fragment_detailsItinerary_button_insert_review"
                    android:textAllCaps="false"
                    android:textColor="@color/white"
                    android:textIsSelectable="false"
                    android:textSize="16sp"
                    android:textStyle="normal"
                    app:backgroundTint="#8668A136"
                    app:cornerRadius="25dp">

                </Button>

            </LinearLayout>

        </LinearLayout>

    </ScrollView>

</RelativeLayout>

ciò che mi restituisce quando eseguo è che ho null sulla schermata cioè non si caricano i dati anche se ho visto in debug e i dati ci sono nel database firebase, cosa non va?
Grazie in anticipo
 
Ultima modifica:

Skills07

Head of Development
Staff Forum
Utente Èlite
35,447
11,502
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
Parto dal presupposto che secondo me questo metodo è sbagliato

Codice:
private void loadItineraryDetails() {
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference referenceDb = database.getReference("Itinerary");

        referenceDb.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                String titleItinerary = "" + snapshot.child("titleItinerary").getValue();
                String descriptionItinerary = "" + snapshot.child("descriptionItinerary").getValue();
                String difficultyLevel = "" + snapshot.child("difficultyLevel").getValue();
                String hours = "" + snapshot.child("hours").getValue();
                String minutes = "" + snapshot.child("minutes").getValue();
                String seconds = "" + snapshot.child("seconds").getValue();
                String image = "" + snapshot.child("image").getValue();

                title_details_itinerary.setText(titleItinerary);
                description_detailsItinerary.setText(descriptionItinerary);
                difficultLivel_details_Itinerary.setText(difficultyLevel);
                hours_details_Itinerary.setText(hours);
                minutes_details_Itinerary.setText(minutes);
                seconds_details_Itinerary.setText(seconds);
                seconds_details_Itinerary.setText(seconds);
                imageView_details_itinerary.setImageURI(Uri.parse(image));
            }

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

            }
        });
    }

In quanto in Java se stai facendo una loadFunction dei dati avrebbe senso che gli passi l'oggetto.
Io mi immagino che tu abbia un listing e dal listing ne selezioni 1.
Nel fragment di android dovresti passare l'oggetto Itenerary.
Se fai questa load dovrebbe diventare come segue:
Java:
private void loadItineraryDetails(Itinerary itinerary) {

        

        });

Dove da itinerary ti fai la get delle sue proprietà lette da db
 

sare1234

Utente Attivo
262
3
Parto dal presupposto che secondo me questo metodo è sbagliato

Codice:
private void loadItineraryDetails() {
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference referenceDb = database.getReference("Itinerary");

        referenceDb.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                String titleItinerary = "" + snapshot.child("titleItinerary").getValue();
                String descriptionItinerary = "" + snapshot.child("descriptionItinerary").getValue();
                String difficultyLevel = "" + snapshot.child("difficultyLevel").getValue();
                String hours = "" + snapshot.child("hours").getValue();
                String minutes = "" + snapshot.child("minutes").getValue();
                String seconds = "" + snapshot.child("seconds").getValue();
                String image = "" + snapshot.child("image").getValue();

                title_details_itinerary.setText(titleItinerary);
                description_detailsItinerary.setText(descriptionItinerary);
                difficultLivel_details_Itinerary.setText(difficultyLevel);
                hours_details_Itinerary.setText(hours);
                minutes_details_Itinerary.setText(minutes);
                seconds_details_Itinerary.setText(seconds);
                seconds_details_Itinerary.setText(seconds);
                imageView_details_itinerary.setImageURI(Uri.parse(image));
            }

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

            }
        });
    }

In quanto in Java se stai facendo una loadFunction dei dati avrebbe senso che gli passi l'oggetto.
Io mi immagino che tu abbia un listing e dal listing ne selezioni 1.
Nel fragment di android dovresti passare l'oggetto Itenerary.
Se fai questa load dovrebbe diventare come segue:
Java:
private void loadItineraryDetails(Itinerary itinerary) {

       

        });

Dove da itinerary ti fai la get delle sue proprietà lette da db
okay in realtà ho fatto anche in quest'altro modo però mi da sempre lo stesso risultato ossia schermata con valori null:

Java:
private void loadItineraryDetails() {
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference referenceDb = database.getReference("Itinerary");

        itineraryList = new ArrayList<>();

        Itinerary itinerary = new Itinerary();

        itineraryList.clear();

        referenceDb.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                Iterable<DataSnapshot> dataSnapsho1 = snapshot.getChildren();

                for (DataSnapshot ds : dataSnapsho1) {

                    if (ds.child("titleItinerary").getValue() != null) {
                        Itinerary itinerary = new Itinerary(
                                (String) ds.child("titleItinerary").getValue(),
                                (String) ds.child("descriptionItinerary").getValue(),
                                (String) ds.child("difficultyLevel").getValue(),
                                (String) ds.child("hours").getValue(),
                                (String) ds.child("minutes").getValue(),
                                (String) ds.child("seconds").getValue(),
                                String.valueOf(ds.child("image").getValue()));
                        itineraryList.add(itinerary);
                    }
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });
    }
Post unito automaticamente:

okay in realtà ho fatto anche in quest'altro modo però con questo non mi carica nulla neanche i null

Java:
private void loadItineraryDetails() {
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference referenceDb = database.getReference("Itinerary");

        itineraryList = new ArrayList<>();

        Itinerary itinerary = new Itinerary();

        itineraryList.clear();

        referenceDb.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                Iterable<DataSnapshot> dataSnapsho1 = snapshot.getChildren();

                for (DataSnapshot ds : dataSnapsho1) {

                    if (ds.child("titleItinerary").getValue() != null) {
                        Itinerary itinerary = new Itinerary(
                                (String) ds.child("titleItinerary").getValue(),
                                (String) ds.child("descriptionItinerary").getValue(),
                                (String) ds.child("difficultyLevel").getValue(),
                                (String) ds.child("hours").getValue(),
                                (String) ds.child("minutes").getValue(),
                                (String) ds.child("seconds").getValue(),
                                String.valueOf(ds.child("image").getValue()));
                        itineraryList.add(itinerary);
                    }
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });
    }
 

Skills07

Head of Development
Staff Forum
Utente Èlite
35,447
11,502
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
Ma nulli è normale penso, se non sa da quale oggetto pescare i dati.
Cioè una query da DB dovrebbe farla cercando i dati attraverso un oggetto.
E non mi pare di vederlo fare nel tuo codice.
Immagina la query come Select * from pippo where pippo.id = 1;
Nel tuo caso Dovresti passare Itinerary.
Fare la tua query tramite quell'itinerary che restituirà un oggetto e da quell'oggetto popolare cio che ti serve.
 

sare1234

Utente Attivo
262
3
Ma nulli è normale penso, se non sa da quale oggetto pescare i dati.
Cioè una query da DB dovrebbe farla cercando i dati attraverso un oggetto.
E non mi pare di vederlo fare nel tuo codice.
Immagina la query come Select * from pippo where pippo.id = 1;
Nel tuo caso Dovresti passare Itinerary.
Fare la tua query tramite quell'itinerary che restituirà un oggetto e da quell'oggetto popolare cio che ti serve.
okay quindi non posso farlo così

Java:
private void loadItineraryDetails() {
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference referenceDb = database.getReference("Itinerary");

        itineraryList = new ArrayList<>();

        Itinerary itinerary = new Itinerary();

        itineraryList.clear();

        referenceDb.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                Iterable<DataSnapshot> dataSnapsho1 = snapshot.getChildren();

                for (DataSnapshot ds : dataSnapsho1) {

                    if (ds.child("titleItinerary").getValue() != null) {
                        Itinerary itinerary = new Itinerary(
                                (String) ds.child("titleItinerary").getValue(),
                                (String) ds.child("descriptionItinerary").getValue(),
                                (String) ds.child("difficultyLevel").getValue(),
                                (String) ds.child("hours").getValue(),
                                (String) ds.child("minutes").getValue(),
                                (String) ds.child("seconds").getValue(),
                                String.valueOf(ds.child("image").getValue()));
                        itineraryList.add(itinerary);
                    }
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });
    }
Perche facendo cosi in un altro fragment mi funziona
 

Skills07

Head of Development
Staff Forum
Utente Èlite
35,447
11,502
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
Dipende se i fragment fanno la stessa action, perchè se fanno la stessa cosa hai del codice rindondante
 

sare1234

Utente Attivo
262
3
Dipende se i fragment fanno la stessa action, perchè se fanno la stessa cosa hai del codice rindondante
no prendono dati diversi, però intendevo dire che in un altro fragment con dati diversi utilizzano un metodo analogo a questo:

Codice:
private void loadItineraryDetails() {
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        referenceDb = FirebaseDatabase.getInstance().getReference();
        DatabaseReference referenceDb = database.getReference("Itinerary");

        itineraryList = new ArrayList<>();

        Itinerary itin = new Itinerary();
        String itineraryId = itin.getItineraryId();

        itineraryList.clear();

        referenceDb.child("Itinerary").child(itineraryId).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                Iterable<DataSnapshot> dataSnapsho1 = snapshot.getChildren();

                for (DataSnapshot ds : dataSnapsho1) {

                    if (ds.child("titleItinerary").getValue() != null) {
                        Itinerary itinerary = new Itinerary(
                                (String) ds.child("titleItinerary").getValue(),
                                (String) ds.child("descriptionItinerary").getValue(),
                                (String) ds.child("difficultyLevel").getValue(),
                                (String) ds.child("hours").getValue(),
                                (String) ds.child("minutes").getValue(),
                                (String) ds.child("seconds").getValue(),
                                String.valueOf(ds.child("image").getValue()));
                        itineraryList.add(itinerary);
                    }
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });
    }

funziona mentre in questo caso no.
Post unito automaticamente:

no prendono dati diversi il rerecycleView prende solo titolo, immagine e l'email dell'utente mentre il fragment con i dettagli prende titolo, immagine, ore, minuti, secondi, livello di difficolta e descrizione, però intendevo dire che in un altro fragment con dati diversi utilizzano un metodo analogo a questo:

Codice:
private void loadItineraryDetails() {
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        referenceDb = FirebaseDatabase.getInstance().getReference();
        DatabaseReference referenceDb = database.getReference("Itinerary");

        itineraryList = new ArrayList<>();

        Itinerary itin = new Itinerary();
        String itineraryId = itin.getItineraryId();

        itineraryList.clear();

        referenceDb.child("Itinerary").child(itineraryId).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                Iterable<DataSnapshot> dataSnapsho1 = snapshot.getChildren();

                for (DataSnapshot ds : dataSnapsho1) {

                    if (ds.child("titleItinerary").getValue() != null) {
                        Itinerary itinerary = new Itinerary(
                                (String) ds.child("titleItinerary").getValue(),
                                (String) ds.child("descriptionItinerary").getValue(),
                                (String) ds.child("difficultyLevel").getValue(),
                                (String) ds.child("hours").getValue(),
                                (String) ds.child("minutes").getValue(),
                                (String) ds.child("seconds").getValue(),
                                String.valueOf(ds.child("image").getValue()));
                        itineraryList.add(itinerary);
                    }
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });
    }

funziona mentre in questo caso no.
 
Ultima modifica:

Skills07

Head of Development
Staff Forum
Utente Èlite
35,447
11,502
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
io qui noto che recuperi l'itinerary:

Codice:
Itinerary itin = new Itinerary();
        String itineraryId = itin.getItineraryId();
 
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!