android - Kotlin fragment 中的API数据

标签 android android-studio android-fragments kotlin

我正在尝试使用Drawer activity,似乎它有3个文件可以将简单文本显示为This is home Fragment:|

无论如何,我已经跟踪了所有这些文件,并找到了fragment_home.xmlHomeFragment.ktHomeViewModel.kt

Question

How should I call for API data trough fragments?




my code
基于android studio documentation,这是我应该用来获取api数据的代码。
val textView = findViewById<TextView>(R.id.TextView)

// Instantiate the RequestQueue.
val queue = Volley.newRequestQueue(this)
val url = "https://example.com/api/listings"

// Request a string response from the provided URL.
val stringRequest = StringRequest(
    Request.Method.GET, url,
    Response.Listener<String> { response ->
        // Display the first 500 characters of the response string.
        textView.text = "Response is: ${response.substring(0, 500)}"
    },
    Response.ErrorListener { textView.text = "That didn't work!" })

// Add the request to the RequestQueue.
queue.add(stringRequest)

PS: I have tried this code above in empty activity it's working


HomeViewModel.kt
class HomeViewModel : ViewModel() {

    private val _text = MutableLiveData<String>().apply {
        value = "This is home Fragment"
    }
    val text: LiveData<String> = _text
}
HomeFragment.kt
class HomeFragment : Fragment() {

    private lateinit var homeViewModel: HomeViewModel

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        homeViewModel =
            ViewModelProviders.of(this).get(HomeViewModel::class.java)
        val root = inflater.inflate(R.layout.fragment_home, container, false)
        val textView: TextView = root.findViewById(R.id.text_home)
        homeViewModel.text.observe(this, Observer {
            textView.text = it
        })
        return root
    }
}
fragment_home.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/text_home"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:textAlignment="center"
        android:textSize="20sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Please note, before you try to give down-vote: I am aware this question probably is very basic question, but note that it's my first time ever using fragments (basically newbie in android studio), so yes my questions are kind of basic :)

最佳答案

从片段调用API,您可以

class HomeFragment : Fragment() {

  private lateinit var homeViewModel: HomeViewModel

            override fun onCreateView(
                inflater: LayoutInflater,
                container: ViewGroup?,
                savedInstanceState: Bundle?
            ): View? {
                homeViewModel = ViewModelProviders.of(this).get(HomeViewModel::class.java)

                val root = inflater.inflate(R.layout.fragment_home, container, false)

                val textView: TextView = root.findViewById(R.id.text_home)

                //calling the API
                callAPIDemo(textView)

               // homeViewModel.text.observe(this, Observer {
               //     textView.text = it
               // })

                return root
            }

     fun callAPIDemo(textView: TextView) {
        // Instantiate the RequestQueue.
        val queue = Volley.newRequestQueue(activity)
        val url = "https://example.com/api/listings"

        // Request a string response from the provided URL.
        val stringRequest = StringRequest(
                Request.Method.GET, url,
                Response.Listener<String> { response ->
                    // Display the first 500 characters of the response string.
                    textView.text = "Response is: ${response.substring(0, 500)}"
                },
                Response.ErrorListener { textView.text = "That didn't work!" })

        // Add the request to the RequestQueue.
        queue.add(stringRequest)
    }

        }

关于android - Kotlin fragment 中的API数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60096397/

相关文章:

Android longClickEvent 和滑动事件一起

android - 离开 Activity 后保留变量

android - 播放服务 5.2.08 发行

android - Fragment 的 onActivityCreated() 在 Activity 的 onDestroy() 之后被调用

android - 带有 ListView 和自定义 Header 的 NavigationDrawer fragment

android - 如何使用一个像素的 Sobel 矩阵

android - AdMob 在 android 中需要哪些权限

android - 无法使用 Espresso 启动应用程序

android - 我可以在更新完成后删除名为 ".AndroidStudio3.0"的文件夹吗?

java - fragment 添加导致我出错