recycleView passaggio con firebase in Android Studio

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

sare1234

Utente Attivo
Messaggi
262
Reazioni
3
Punteggio
35
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:
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
 
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) {

            }
        });
    }
--- i due messaggi sono stati uniti ---
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) {

            }
        });
    }
 
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.
 
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
 
Dipende se i fragment fanno la stessa action, perchè se fanno la stessa cosa hai del codice rindondante
 
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.
--- i due messaggi sono stati uniti ---
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:
io qui noto che recuperi l'itinerary:

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