Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我的Post请求的结果是用户的身份验证令牌。我想在应用程序的TextView中显示此令牌,但TextView未更新_Android_Kotlin - Fatal编程技术网

Android 我的Post请求的结果是用户的身份验证令牌。我想在应用程序的TextView中显示此令牌,但TextView未更新

Android 我的Post请求的结果是用户的身份验证令牌。我想在应用程序的TextView中显示此令牌,但TextView未更新,android,kotlin,Android,Kotlin,//用于检索令牌-->的函数正在运行 对象常数{ //Opalen token van de user(请求符合用户名和密码,获取TokenModel和API服务 fun getFetchedToken(username: String, password: String): String{ var fetchedToken: String = "" // wordt in deze functie als return uitkomst gegeven,

//用于检索令牌-->的函数正在运行

对象常数{

//Opalen token van de user(请求符合用户名和密码,获取TokenModel和API服务

fun getFetchedToken(username: String, password: String): String{

        var fetchedToken: String = ""  // wordt in deze functie als return uitkomst gegeven, ophalen in mainactivity

        // Create Retrofit
        val retrofit = Retrofit.Builder()
            .baseUrl("http://10.0.2.2:8000")
            .addConverterFactory(GsonConverterFactory.create())
            .build()

        // Create Service
        val service = retrofit.create(APIService.APIService::class.java)

        // Create JSON using JSONObject
        val jsonObject = JSONObject()
        jsonObject.put("username", username)   //deze krijgen van het loginscherm app, wordt nu meegegeven in mainactivity
        jsonObject.put("password", password)   //deze krijgen van het loginscherm app


        // Convert JSONObject to String
        val jsonObjectString = jsonObject.toString()

        // Create RequestBody ( We're not using any converter, like GsonConverter, MoshiConverter e.t.c, that's why we use RequestBody )
        val requestBody = jsonObjectString.toRequestBody("application/json".toMediaTypeOrNull())

        CoroutineScope(Dispatchers.IO).launch {
            // Do the POST request and get response
            val response = service.loginUser(requestBody)

            withContext(Dispatchers.Main) {
                if (response.isSuccessful) {
                    val items = response.body()
                    if (items != null) {
                        println("items: ${items.key}")
                        val fetchedToken = items.key.toString()
                        println("fetchedToken as String: ${fetchedToken}")



                    }
                } else {

                    Log.e("RETROFIT_ERROR", response.code().toString())

                }
            }
        }
            println("fetchted token voor return: ${fetchedToken}")
            return fetchedToken
    }

}
//我的主要活动.kt

类MainActivity:AppCompatActivity(){

}


//在这里,我希望使用返回的令牌更新textview,但它是空的。有人告诉我它与coroutine有关。我是初学者,所以我无法理解。

getFetchedToken()的结果需要时间,设置textview时,状态为加载

  • 使getFetchedToken()挂起

  • 删除CoroutineScope(Dispatchers.IO)。从getFetchedToken函数启动{}

  • 在活动中运行以下代码

    override fun onCreate(savedInstanceState: Bundle?) {
    
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)
    
       lifecycle.coroutineScope.launch {
       val getFetchedTokenUser = Constants.getFetchedToken(username = "test", 
       password = "test123")
       println("val fetchedtoken: ${getFetchedTokenUser}")
    
       withContext(Dispatchers.Main){
            text_view_result.text = getFetchedTokenUser
       }
    
       }
    
    }
    

  • getFetchedToken()的结果需要时间,设置textView时,状态为正在加载

  • 使getFetchedToken()挂起

  • 删除CoroutineScope(Dispatchers.IO)。从getFetchedToken函数启动{}

  • 在活动中运行以下代码

    override fun onCreate(savedInstanceState: Bundle?) {
    
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)
    
       lifecycle.coroutineScope.launch {
       val getFetchedTokenUser = Constants.getFetchedToken(username = "test", 
       password = "test123")
       println("val fetchedtoken: ${getFetchedTokenUser}")
    
       withContext(Dispatchers.Main){
            text_view_result.text = getFetchedTokenUser
       }
    
       }
    
    }
    

  • 当我将整个函数放在MainActivity.kt中时,它工作正常?。该函数位于一个单独的文件中,“val getfetchedToken”被“”覆盖,这就是为什么我什么也得不到的原因。getfetchedToken在return语句中,但它给了我“”。我想不出这比getfetchedToken()中设置的“getfetchedToken=”更好,然后启动一个CoroutineScope并在网络响应中更改fetchedToken,但在它更改之前,会调用return fetchedToken。是的,我看到了,但是我可以将带有fetchedToken的return放在哪里?您应该使您的函数挂起,并在CoroutineScope中调用它。当我将整个函数放在MainActivity.kt中时,它工作正常吗ion在一个单独的文件中,“val getfetchedToken”被“”覆盖,这就是为什么我什么也得不到的原因。fetchedToken在return语句中,但它给了我“”。我想不出它比你在getfetchedToken()中设置的fetchedToken=“”),然后启动一个CoroutineScope并在网络响应中更改fetchedToken,但在它更改之前,会调用return fetchedToken。是的,我看到了,但是我可以将带有fetchedToken的return放在哪里?您应该使函数挂起,并在CoroutineScope中调用它