11.11: Un “blog” personale per Android sfruttando Firebase: la model class e l’adapter

Condividi su:

Dopo aver creato la UI di quasi tutta l’app, ritorniamo al codice. Per prima cosa ci servirà la classe che descriverà il modello di dati che stiamo utilizzando e l’adapter della RecyclerView, quindi procediamo.




La model class Blog

Gli oggetti che descrivono il modello di dati utilizzato faranno parte della classe “Blog”, che struttureremo nel solito modo:

package com.decodexlab.blog.Model;

/**
 * Created by DeCodExLab on 09/11/17.
 */

public class Blog {
    private String title;
    private String description;
    private String image;
    private String timeStamp;
    private String userID;

    public Blog() {
    }

    public Blog(String title, String description, String image, String timeStamp, String userID) {
        this.title = title;
        this.description = description;
        this.image = image;
        this.timeStamp = timeStamp;
        this.userID = userID;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public String getTimeStamp() {
        return timeStamp;
    }

    public void setTimeStamp(String timeStamp) {
        this.timeStamp = timeStamp;
    }

    public String getUserID() {
        return userID;
    }

    public void setUserID(String userID) {
        this.userID = userID;
    }
}

È importante assicurarsi di implementare anche il costruttore di default senza parametri, poiché sarà necessario nel momento in cui preleveremo i dati dal database real-time di Firebase. Come saprete il metodo “getValue()” della classe “DataSnapshot” richiede la classe secondo cui modellare gli oggetti che sono stati prelevati dal database e per farlo necessità del costruttore così strutturato, oltre che tutti i getter e setter pubblici.

L’adapter della RecyclerView

Passiamo ora all’adapter della RecyclerView. Questo è strutturato sempre nel solito modo, con i dovuti adattamenti:

/**
 * Created by DeCodExLab on 09/11/17.
 */

public class BlogRecyclerAdapter extends RecyclerView.Adapter<BlogRecyclerAdapter.ViewHolder> {
    private Context context;
    private List<Blog> blogList;

    public BlogRecyclerAdapter(Context context, List<Blog> blogList) {
        this.context = context;
        this.blogList = blogList;
    }

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

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Blog blog = blogList.get(position);
        String imageURl = null;

        holder.title.setText(blog.getTitle());
        holder.description.setText(blog.getDescription());
        DateFormat dateFormat = DateFormat.getDateInstance();
        String formattedDate = dateFormat.format(new Date(Long.valueOf(blog.getTimeStamp())).getTime());
        holder.timeStamp.setText(formattedDate);
        imageURl = blog.getImage();

        //ToDo: use Picasso Librare to load image

    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {
        private ImageView image;
        private TextView title;
        private TextView description;
        private TextView timeStamp;
        private String userID;

        public ViewHolder(View itemView, Context ctx) {
            super(itemView);

            image = (ImageView) itemView.findViewById(R.id.postImageList);
            title = (TextView) itemView.findViewById(R.id.postTitleList);
            description = (TextView) itemView.findViewById(R.id.postTextList);
            timeStamp = (TextView) itemView.findViewById(R.id.timeStampList);

            userID = null;

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //ToDo: go to the next activity
                }
            });
        }
    }
}

Ovviamente questo non è ancora completo, poiché ancora non abbiamo avuto a che fare col dataset e mancano ancora altre cose da implementare. L’unica cosa degna di nota è che stavolta, all’interno delle istanze di Blog, la data di inserimento del post la memorizziamo in una stringa in millisecondi. L’utente non se ne farebbe nulla di un dato del genere, quindi lo convertiamo prima di visualizzarlo sulla view.

Arrivati a questo punto conviene che proviate l’app. Dovrebbe funzionare perfettamente, anche se di fatto, non abbiamo nulla di rilevante, avendo finito soltanto l’implementazione del login.



Per comodità, anche se non abbiamo introdotto nulla di nuovo, con questo articolo ci fermiamo qui, poiché inizieremo ad occuparti del database su Firebase, quindi meglio farlo in un nuovo articolo.

Condividi su:

label, ,

About the author