Kotlin,意图:不能使用提供的参数调用以下任何函数

时间:2021-01-20 17:58:22

标签: kotlin android-intent alert

Intent 不适用于 RestApiService 回调。

以前它在 RegisterActivity 中工作:

fun alert(text: String) {
    val intent = Intent(this, PopUp::class.java)
    intent.putExtra("text", text)
    startActivity(intent)
}

我想将结果显示为弹出消息。 PopUp 是自定义活动视图。

当我把它放到另一个类中时,出现错误:

<块引用>

以下函数都不能用参数调用

<块引用>

提供。 (Context!, Class<*>!) 定义在

<块引用>

android.content.Intent (String!, Uri!) 定义在

<块引用>

android.content.Intent

import android.content.Intent
import androidx.core.content.ContextCompat.startActivity
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response

class RestApiService {

// MY CUSTOM INTENT! WORKED BEFORE IF TO PLACE INTO AN ACTIVITY.
fun alert(text: String) {
    val intent = Intent(this, PopUp::class.java)
    intent.putExtra("text", text)
    startActivity(intent)
}

fun addUser(userData: ModelUserRegister, onResult: (ModelUserRegister?) -> Unit){
    val retrofit = ServiceBuilder.buildService(RestApi::class.java)
    retrofit.addUser(userData).enqueue(

        object : Callback<ModelUserRegister> {

            override fun onFailure(call: Call<ModelUserRegister>, t: Throwable) {
                onResult(null)
            }

            override fun onResponse(call: Call<ModelUserRegister>, response: Response<ModelUserRegister>) {
                val addedUser = response.body()
                if (response.code() in 200..320)
                {
                    alert(response.message())
                } else {
                    alert(response.message())
                }
                onResult(addedUser)
            }
        }
    )
}
}

最新研究给了我改变的建议:

val intent = Intent(this, PopUp::class.java)

到:

val intent = Intent(RegisterActivity.this, PopUp::class.java)

没有帮助。这个问题给那些想要使用 Kotlin 的人!

3 个答案:

答案 0 :(得分:1)

要创建一个新的 Intent 对象,您必须将 context 作为第一个参数传递。您不能只在任何地方使用 this,因为取决于您在哪里使用它,它可能不是 context

只有当您的代码处于活动中时,您才能使用 thisthis@ActivityName(Java 中的ActivityName.this)。

您可以向 context 函数添加 alert() 参数以解决此问题:

fun alert(context: Context, text: String) {
    val intent = Intent(context, PopUp::class.java)
    intent.putExtra("text", text)
    context.startActivity(intent)
}

答案 1 :(得分:0)

第一步。考虑到缺乏信息,最简单的解决方案是使用 callbackreturn(字符串?在我的情况下)。

class RestApiService {

    fun addUser(userData: ModelUserRegister, onResult: (ModelUserRegister?, String?)-> Unit){
        //... code
        onResult(addedUser, response.message())
    }
}

Step2. 调用主 Activity 的返回值并使用带有警报 Intent

View
apiService.addUser(userInfo) { modelUserRegister: ModelUserRegister?, s: String? ->
    if (s != null) {
        alert(s)
    } else {
        alert("NO TEXT AS A RESULT")
    }
}

仍在等待任何建议在 Activity class 外调用 Intent。

答案 2 :(得分:0)

你可以试试这个,如果来自片段:

val intent = Intent(requireContext, PopUp::class.java)