# Lecture 6 & HW 6: Networking, Data, and Persistent Storage

###

### **Textbook**: [9. Data and Persistent Storage](https://android-course.cornellappdev.com/chapters/7.-persistent-storage), [8. Networking & 3rd Party APIs](https://android-course.cornellappdev.com/chapters/6.-networking)

### **Lecture:** [**Google Slides**](https://docs.google.com/presentation/d/1vJI7q_o8v6pC7n0OqrCVqZ5yCz1dWM8nYiYvhkL20lQ/edit?usp=sharing)**,** [**YouTube**](https://youtu.be/MZwdx2PWYYg)

### Final Feedback Form: \[TBD]

### Demo: [Google Slides](https://docs.google.com/presentation/d/1XdVo3fxBGBBZP_A8rsP6rYmkWmzxoiQLl5LNv1HO_i8/edit?usp=sharing), [YouTube](https://youtu.be/gQt6S3vbiEI)

### Quick Note:&#x20;

Y'all are awesome! Thank you for all of your hard work so far; we have a small enough class for me to know that each of you (yes, ALL) are very talented and bright Android Developers. I wish you all success and happiness ☺.

## **Homework Instructions:**&#x20;

### Objectives

**Note: Nothing in this assignment depends on HW5.**

Your goal for this week's assignment is to build off your HW5 social media app with a new feature. There will be a new "For You" tab, which will fetch data from the internet to display posts.

You will create a new screen accessible by Bottom Navigation. It will have a similar structure to the list of posts, but instead of pre-defined images, you are going to use this API to retrieve randomly generated images:

{% embed url="<https://dog.ceo/dog-api/documentation/random>" %}

Notes on the API: We suggest you use the endpoint <https://dog.ceo/api/breeds/image/random/3> to retrieve a list of images. You can change the number at the end to fetch any number of images at the same time (i.e. fetch the same number of images as the size of your post list).

### Requirements:

1. Use what you had previously in HW5.
2. Create a **ForYouScreen** with a LazyList of posts, similar to what you did in HW5 with the **MainScreen.** If you created a Composable component to represent an individual post, you should reuse it for this screen! You do **not** need to have functionality to edit the posts on this screen, just displaying them without clicking is fine.
3. Create a **ForYouViewModel** that uses OkHTTP and Moshi to call the endpoint and store it into a variable in your ViewModel. Create models annotated with Moshi to reflect the structure of the API endpoint. Your ForYouScreen should be defining its data based on the **ForYouViewModel**.

### Tips

1. In the LazyList in your **ForYouScreen**, you may be iterating through your posts via an integer index. This is a good way to associate your list of retrieved images with your list of posts, assuming both lists are the same size.
2. Before the images are retrieved (as it takes time for an HTTP request to complete), don't display anything.
