2

i have query related to multiple api calls . I need to show data's to a recyclerview from 2 different API responses. How to combine all responses from first api and selected fields from 2nd API responses

Eg : Api1 - [{ "item_id : "1", "item_name" : "soap" }]

Api2- [{ "item_id : "1", "item_price" : "10" enter code here`}] enter code here

Output like - Api1 -  [{ "item_id : "1", "item_name" : "soap",enter code here "item_price" : "10"

}]

My Android Classes:-

Model Clasess

 data class UsersData(
    @SerializedName("avatar")
    val avatar: String,
    @SerializedName("id")
    val id: Int,
    @SerializedName("name")
    val name: String,
    )
    enter code here

data class PostData(
    @SerializedName("id")
    val id: Int,
    @SerializedName("body")
    val body: String,
    @SerializedName("title")
    val title: String,
)
data class SocialMediaData(
    @SerializedName("avatar")
    var avatar: String="default",
    @SerializedName("id")
    var id: Int=0,
    @SerializedName("name")
    var name: String="name",
    @SerializedName("body")
    var body: String="body",
    @SerializedName("title")
    var title: String="title",
)

This is my viewmodel function

private fun fetchUsers() {

    val apikey = "891B1ACC2262F7268DC688D48178C9D9"
    viewModelScope.launch {
 /*       usersList.postValue(Resource.loading(null))
        postList.postValue(Resource.loading(null))*/
        allUsersFromApi.postValue(Resource.loading(null))
        try {
            // coroutineScope is needed, else in case of any network error, it will crash
            coroutineScope {
                val usersFromApiDeferred = async { apiHelper.getUsersData(apikey) }
                val moreUsersFromApiDeferred = async { apiHelper.getPostsData(apikey) }

                val usersFromApi = usersFromApiDeferred.await()
                val moreUsersFromApi = moreUsersFromApiDeferred.await()


                Log.i("hfhf",""+allUsersFromApi)

                for (l1 in usersFromApi) {
                    for (l2 in moreUsersFromApi) {
                        if (l1.id == l2.id) {

                       /*     val searchHomeModel = SocialMediaData()*/
                            searchHomeModel.name = l1.name
                            searchHomeModel.avatar = l1.avatar
                            searchHomeModel.title= l2.title
                            searchHomeModel.name = l2.body
       

                            allUsersFromApi.postValue(searchHomeModel)

                        }
                    }
                }


              /*  usersList.postValue(Resource.success(allUsersFromApi))
                postList.postValue(Resource.success(allUsersFromApi))*/
            }
        } catch (e: Exception) {
            usersList.postValue(Resource.error("Something Went Wrong", null))
            postList.postValue(Resource.error("Something Went Wrong", null))
        }
    }
}

Shows error in this line

allUsersFromApi.postValue(searchHomeModel)

arraylist.post() is not working.

shows Type mismatch. Required: Resource<List>! Found: SocialMediaData

Please help me

1 Answers1

0

Try this -

  1. Let's suppose

-> your first API list is list1 and the second API list is list2 -> Create a third list list3

Model -

public class Output
{
    String item_id;
    String item_name;
    String item_price;

    public String getItem_id() {
        return item_id;
    }

    public void setItem_id(String item_id) {
        this.item_id = item_id;
    }

    public String getItem_name() {
        return item_name;
    }

    public void setItem_name(String item_name) {
        this.item_name = item_name;
    }

    public String getItem_price() {
        return item_price;
    }

    public void setItem_price(String item_price) {
        this.item_price = item_price;
    }
}

Third output list3 -

ArrayList<Output> list3=new ArrayList<>();

Use the below code to create a third list -

for(List1 l1:list1){
        for(List2 l2:list2){
            if(l1.getItem_id().equals(l2.getItem_id())){
                Output output=new Output();
                output.setItem_id(l1.getItem_id());
                output.setItem_name(l1.getItem_name());
                output.setItem_id(l2.getItem_price());
                list3.add(output);
            }
        }
    }
Aditya Nandardhane
  • 915
  • 1
  • 8
  • 22