Token Wise

         
 api/ApiService

@POST("api/APIKisokProductDetail.asmx/CartDetails")
suspend fun getPostApi(
    @Body post: Request
): Response<CartResponse>
         
 api/ApiService

package com.akashpal.gcrg.mvvm.repository

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.akashpal.gcrg.mvvm.api.ApiService
import com.akashpal.gcrg.mvvm.models.CartResponse
import com.akashpal.gcrg.mvvm.models.Request

class PostBTokenRepository (private val apiService: ApiService) {
    private val _cartResponse = MutableLiveData<CartResponse>()
    val cartResponse: LiveData<CartResponse> = _cartResponse
    suspend fun getCartResponse(request: Request, token: String) {
        try {
            val response = apiService.createPostBearer(request, "Bearer $token")
            if (response.isSuccessful) {
                _cartResponse.postValue(response.body())
            }
        } catch (e: Exception) {

        }
    }
}
         
 api/ApiService

package com.akashpal.gcrg.mvvm.viewModel

import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.akashpal.gcrg.mvvm.models.CartResponse
import com.akashpal.gcrg.mvvm.models.Request
import com.akashpal.gcrg.mvvm.repository.PostBTokenRepository
import kotlinx.coroutines.launch

class PostBTokenViewModel(private val repository: PostBTokenRepository): ViewModel() {
    val cartResponse: LiveData<CartResponse> = repository.cartResponse
    fun fetchCartDetails(request: Request, token: String) {
        viewModelScope.launch {
            repository.getCartResponse(request, token)
        }
    }
}
         
 api/ApiService

package com.akashpal.gcrg.mvvm.viewModel

import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.akashpal.gcrg.mvvm.repository.PostBTokenRepository

class PostBTokenViewModelFactory(private val repository: PostBTokenRepository) : ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>): T {
        return PostBTokenViewModel(repository) as T
    }
}
         
 api/ApiService

package com.akashpal.gcrg.mvvm

import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.Spinner
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.get
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.akashpal.gcrg.mvvm.adapter.PostAdapter
import com.akashpal.gcrg.mvvm.api.RetrofitClient
import com.akashpal.gcrg.mvvm.api.RetrofitClientCart
import com.akashpal.gcrg.mvvm.databinding.ActivityMainBinding
import com.akashpal.gcrg.mvvm.models.Request
import com.akashpal.gcrg.mvvm.models.RequestContainer
import com.akashpal.gcrg.mvvm.models.RequestData
import com.akashpal.gcrg.mvvm.repository.CartRepository
import com.akashpal.gcrg.mvvm.repository.PostBTokenRepository
import com.akashpal.gcrg.mvvm.repository.PostRepository
import com.akashpal.gcrg.mvvm.viewModel.CartViewModel
import com.akashpal.gcrg.mvvm.viewModel.CartViewModelFactory
import com.akashpal.gcrg.mvvm.viewModel.PostBTokenViewModel
import com.akashpal.gcrg.mvvm.viewModel.PostBTokenViewModelFactory
import com.akashpal.gcrg.mvvm.viewModel.PostViewModel
import com.akashpal.gcrg.mvvm.viewModel.PostViewModelFactory

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    lateinit var mainViewModel: PostViewModel
    private lateinit var postAdapter: PostAdapter

    private lateinit var cartViewModel: CartViewModel
    private lateinit var postBViewModel: PostBTokenViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }

        val postService = RetrofitClient.getClient()
        val repository = PostRepository(postService)

        setupRecyclerView()

        mainViewModel = ViewModelProvider(this, PostViewModelFactory(repository)).get(PostViewModel::class.java)
        mainViewModel.posts.observe(this, Observer {
            if (it != null) {
                Log.d("PostData", it.toString())
                postAdapter.submitList(it)
            }
        })
        mainViewModel.getPostById(2).observe(this, Observer {
            if (it != null) {
                Log.d("SpecificPost", "Post with ID 2: ${it.title}")
            } else {
                Log.d("SpecificPost", "No post found with ID $2")
            }
        })

        val spinner: Spinner = findViewById(R.id.spinner_posts)
        mainViewModel.getPostTitles().observe(this) { titles ->
            val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, titles)
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
            spinner.adapter = adapter
        }

        spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onItemSelected(parent: AdapterView<*>, view: View?, position: Int, id: Long) {
                // Get the selected item
                val selectedItem = parent.getItemAtPosition(position) as String

                // Show a Toast with the selected index and value
                Toast.makeText(
                    this@MainActivity, "Selected index: $position, Value: $selectedItem",
                    Toast.LENGTH_SHORT
                ).show()
            }

            override fun onNothingSelected(parent: AdapterView<*>) {
                // Handle the case when nothing is selected if needed
            }
        }

        binding.btn.setOnClickListener {
            val intent = Intent(this, SecondActivity::class.java)
            startActivity(intent)
        }

        // Initialize Retrofit and Repository
        val postCartService = RetrofitClientCart.getClient()
        val postCartRepository = CartRepository(postCartService)

        // Initialize ViewModel
        cartViewModel = ViewModelProvider(this,
            CartViewModelFactory(postCartRepository)).get(CartViewModel::class.java)

        // Observe the LiveData from ViewModel
        cartViewModel.cartResponse.observe(this, Observer { response ->
            if (response != null) {
                Log.d("CartResponse", "Success: ${response.d.responseMessage}")
                // Update your UI with the response data
            } else {
                Log.d("CartResponse", "Error fetching data")
            }
        })

        // Trigger the API call
        val request = Request(
            requestContainer = RequestContainer(
                securityToken = "",
                deviceId = "Andro8.5",
                latLong = "",
                appVersion = "yourAppVersion",
                requestSource = "kiosk"
            ),
            requestData = RequestData(
                CartAutoId = 22643
            )
        )

        cartViewModel.fetchCartDetails(request)

        // Initialize Retrofit and Repository
        val postBTokenService = RetrofitClientCart.getClient()
        val postBTokenRepository = PostBTokenRepository(postBTokenService)
        postBViewModel = ViewModelProvider(
            this, PostBTokenViewModelFactory(postBTokenRepository)).get(PostBTokenViewModel::class.java)

        postBViewModel.cartResponse.observe(this, Observer { response ->
            if (response != null) {
                Log.d("CartResponse", "Success: ${response.d.responseMessage}")
                // Update your UI with the response data
            } else {
                Log.d("CartResponse", "Error fetching data")
            }
        })

        // Trigger the API call
        val request1 = Request(
            requestContainer = RequestContainer(
                securityToken = "",
                deviceId = "Andro8.5",
                latLong = "",
                appVersion = "yourAppVersion",
                requestSource = "kiosk"
            ),
            requestData = RequestData(
                CartAutoId = 22643
            )
        )

        postBViewModel.fetchCartDetails(request1, "AKajgyugvbftyf")
    }

    private fun setupRecyclerView() {
        val recyclerView = findViewById(R.id.recyclerView)
        recyclerView.layoutManager = LinearLayoutManager(this)
        postAdapter = PostAdapter()
        recyclerView.adapter = postAdapter
    }
}