Java 如何返回数组而不是任务?
在ActivitySignup中,我想调用Java 如何返回数组而不是任务?,java,android,kotlin,google-cloud-functions,task,Java,Android,Kotlin,Google Cloud Functions,Task,在ActivitySignup中,我想调用createUser函数(从我的Firestore类)。我希望createUser将结果和消息返回到ActivitySignup。这将保持我的活动注册非常干净。我该怎么做 活动注册: class ActivitySignup : AppCompatActivity() { private lateinit var user: String private lateinit var userEditTxt: EditText pr
createUser
函数(从我的Firestore类)。我希望createUser
将结果
和消息
返回到ActivitySignup。这将保持我的活动注册非常干净。我该怎么做
活动注册:
class ActivitySignup : AppCompatActivity() {
private lateinit var user: String
private lateinit var userEditTxt: EditText
private lateinit var email: String
private lateinit var emailEditTxt: EditText
private lateinit var password: String
private lateinit var passwordEditTxt: EditText
private lateinit var backbutton: Button
private lateinit var terms: CheckBox
private lateinit var submitbutton: Button
private lateinit var auth: FirebaseAuth
private lateinit var currentDateTime: DateTime
private val tag: String = "ActivitySignup"
private lateinit var functions: FirebaseFunctions
private lateinit var fs: FS
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_signup)
fs = FS()
submitbutton = findViewById(R.id.btn_submit)
submitbutton.setOnClickListener() {
Log.e(tag,"Clicked submit")
userEditTxt = findViewById(R.id.et_user)
user = userEditTxt.text.toString().trim()
emailEditTxt = findViewById(R.id.et_email)
email = emailEditTxt.text.toString().trim()
passwordEditTxt = findViewById(R.id.et_password)
password = passwordEditTxt.text.toString().trim()
if (user.isNotEmpty() && email.isNotEmpty() && password.isNotEmpty()) {
// fs.createUser(user, email, password)
// .continueWith { task ->
// if (task.isSuccessful) {
// Log.e(tag, "createUser task succeeded")
//// Log.e(tag, "Result1: ${task.result?.get("result")}") //case sensitive
//// Log.e(tag, "Result2: ${task.result. ("message")}") //case sensitive
//
// val taskResult = task.result //.get("result")
// val result = taskResult.getData
// val message = task.result?.get("message")
//
// val intent = Intent(this, ActivityGroups::class.java)
// startActivity(intent)
// finish()
// } else {
// Log.e(tag, "createUser task failed")
// }
// }
var returnResult = fs.createUser(user, email, password)
Log.e(tag, "returnResult[0]: ${returnResult[0]}")
Log.e(tag, "returnResult[1]: ${returnResult[1]}")
//Code continues only if result = 1...
}
}
}
}
fun createUser(user: String, email: String, password: String): Array<String> {
Log.e(tag, "createUser()")
val functions = Firebase.functions
val auth = Firebase.auth
var result: String
var message: String
auth.createUserWithEmailAndPassword(email, password)
.continueWith() { task ->
if (task.isSuccessful) {
Log.e(tag, "auth.createUserWithEmailAndPassword() successful")
var data = hashMapOf<String, String>()
data["user"] = user
data["email"] = email
functions.getHttpsCallable("createUser").call(data)
.continueWith() { task ->
if (task.isSuccessful) {
Log.e(tag, "CF_createUser task was successful")
Log.e(tag, "CF_createUser: ${task.result?.data.toString()}")
var returnData = task.result?.data.toString()
result = returnData[0].toString()
message = returnData[1].toString()
} else {
Log.e(tag, "CF_createUser task failed")
Log.e(tag, "CF_createUser exception message: ${task.exception?.message}")
Log.e(tag, "CF_createUser exception localizedMessage: ${task.exception?.localizedMessage}")
}
}
} else {
Log.e(tag, "auth.createUserWithEmailAndPassword() failed")
Log.e(tag, "authTask exception: ${task.exception.toString()}")
}
}
return arrayOf(result, message)
}
FS.createUser():
class ActivitySignup : AppCompatActivity() {
private lateinit var user: String
private lateinit var userEditTxt: EditText
private lateinit var email: String
private lateinit var emailEditTxt: EditText
private lateinit var password: String
private lateinit var passwordEditTxt: EditText
private lateinit var backbutton: Button
private lateinit var terms: CheckBox
private lateinit var submitbutton: Button
private lateinit var auth: FirebaseAuth
private lateinit var currentDateTime: DateTime
private val tag: String = "ActivitySignup"
private lateinit var functions: FirebaseFunctions
private lateinit var fs: FS
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_signup)
fs = FS()
submitbutton = findViewById(R.id.btn_submit)
submitbutton.setOnClickListener() {
Log.e(tag,"Clicked submit")
userEditTxt = findViewById(R.id.et_user)
user = userEditTxt.text.toString().trim()
emailEditTxt = findViewById(R.id.et_email)
email = emailEditTxt.text.toString().trim()
passwordEditTxt = findViewById(R.id.et_password)
password = passwordEditTxt.text.toString().trim()
if (user.isNotEmpty() && email.isNotEmpty() && password.isNotEmpty()) {
// fs.createUser(user, email, password)
// .continueWith { task ->
// if (task.isSuccessful) {
// Log.e(tag, "createUser task succeeded")
//// Log.e(tag, "Result1: ${task.result?.get("result")}") //case sensitive
//// Log.e(tag, "Result2: ${task.result. ("message")}") //case sensitive
//
// val taskResult = task.result //.get("result")
// val result = taskResult.getData
// val message = task.result?.get("message")
//
// val intent = Intent(this, ActivityGroups::class.java)
// startActivity(intent)
// finish()
// } else {
// Log.e(tag, "createUser task failed")
// }
// }
var returnResult = fs.createUser(user, email, password)
Log.e(tag, "returnResult[0]: ${returnResult[0]}")
Log.e(tag, "returnResult[1]: ${returnResult[1]}")
//Code continues only if result = 1...
}
}
}
}
fun createUser(user: String, email: String, password: String): Array<String> {
Log.e(tag, "createUser()")
val functions = Firebase.functions
val auth = Firebase.auth
var result: String
var message: String
auth.createUserWithEmailAndPassword(email, password)
.continueWith() { task ->
if (task.isSuccessful) {
Log.e(tag, "auth.createUserWithEmailAndPassword() successful")
var data = hashMapOf<String, String>()
data["user"] = user
data["email"] = email
functions.getHttpsCallable("createUser").call(data)
.continueWith() { task ->
if (task.isSuccessful) {
Log.e(tag, "CF_createUser task was successful")
Log.e(tag, "CF_createUser: ${task.result?.data.toString()}")
var returnData = task.result?.data.toString()
result = returnData[0].toString()
message = returnData[1].toString()
} else {
Log.e(tag, "CF_createUser task failed")
Log.e(tag, "CF_createUser exception message: ${task.exception?.message}")
Log.e(tag, "CF_createUser exception localizedMessage: ${task.exception?.localizedMessage}")
}
}
} else {
Log.e(tag, "auth.createUserWithEmailAndPassword() failed")
Log.e(tag, "authTask exception: ${task.exception.toString()}")
}
}
return arrayOf(result, message)
}
fun createUser(用户:字符串、电子邮件:字符串、密码:字符串):数组{
Log.e(标记“createUser()”)
val functions=Firebase.functions
val auth=Firebase.auth
变量结果:字符串
var消息:字符串
auth.createUserWithEmailAndPassword(电子邮件,密码)
.continueWith(){task->
如果(任务成功){
Log.e(标记“auth.createUserWithEmailAndPassword()成功”)
var data=hashMapOf()
数据[“用户”]=用户
数据[“电子邮件”]=电子邮件
functions.getHttpScalable(“createUser”).call(数据)
.continueWith(){task->
如果(任务成功){
Log.e(标记“CF_createUser任务成功”)
Log.e(标记“CF_createUser:${task.result?.data.toString()}”)
var returnData=task.result?.data.toString()
结果=返回数据[0]。toString()
message=returnData[1].toString()
}否则{
Log.e(标记“CF_createUser任务失败”)
Log.e(标记“CF_createUser异常消息:${task.exception?.message}”)
Log.e(标记“CF_createUser exception localizedMessage:${task.exception?.localizedMessage}”)
}
}
}否则{
Log.e(标记“auth.createUserWithEmailAndPassword()失败”)
Log.e(标记“authTask异常:${task.exception.toString()}”)
}
}
返回数组(结果、消息)
}
如果您看看这里:
val functions = Firebase.functions
val auth = Firebase.auth
var result: String
var message: String
与函数和身份验证不同,结果和消息不是用值初始化的(即,它们没有值)。可以使用如下初始值初始化它们:
var result: String = ""
var message: String = ""
lateinit var result: String
lateinit var message: String
或者他们是这样的:
var result: String = ""
var message: String = ""
lateinit var result: String
lateinit var message: String
这意味着这些变量将在代码处理时获得一个值
最新一期的最新情况:
auth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
//Call your cloud function here
//If Cloud functions returns desired response, proceed
return arrayOf(result, message)
}
}
如果你看看这里:
val functions = Firebase.functions
val auth = Firebase.auth
var result: String
var message: String
与函数和身份验证不同,结果和消息不是用值初始化的(即,它们没有值)。可以使用如下初始值初始化它们:
var result: String = ""
var message: String = ""
lateinit var result: String
lateinit var message: String
或者他们是这样的:
var result: String = ""
var message: String = ""
lateinit var result: String
lateinit var message: String
这意味着这些变量将在代码处理时获得一个值
最新一期的最新情况:
auth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
//Call your cloud function here
//If Cloud functions returns desired response, proceed
return arrayOf(result, message)
}
}
您得到的错误是不言自明的,因为您没有给result参数任何初始值。您可以采取的另一个操作是将回调方法传递给createUser函数,并使其接受两个参数,result和message。@我应该提到,我是初学者。我不确定我是否理解你的建议。你得到的错误是不言自明的,因为你没有给结果参数任何初始值。您可以采取的另一个操作是将回调方法传递给createUser函数,并使其接受两个参数,result和message。@我应该提到,我是初学者。不确定我是否理解您的建议。如果我使用您的第一种方法,
FS.createUser()
将空字符串传回ActivitySignup,但这是不对的,因为它应该传回result=“1”
。我的问题基本上是关于范围的。如何使用任务填充变量,然后将该变量传递回ActivitySignup?您只需在返回中添加1
,您应该能够调整他的建议,不是吗?为了澄清,1
不是此过程的标准返回类型。@DIGIByte我想返回result
和message
,它们来自后端的云函数。我不想硬编码1,我想用Email和Password运行auth.createUsers,如果成功,则运行createUser云函数,该函数返回结果
和消息
。我希望将这些值(无论它们是什么)添加到ActivitySignup中,以便ActivitySignup上的代码非常干净。成功创建时没有结果或消息,它只是让您登录。它只在上返回一条消息failure@DIGIByte结果
和消息
来自自定义后端云函数。如果auth.createUserWithEmailAndPassword成功->运行自定义后端云函数,该函数返回result
和message
->如果result=1
…代码的其余部分。如果我使用第一种方法,FS.createUser()
将空字符串传回ActivitySignup,但这是不对的,因为它应该传回result=“1”
。我的问题基本上是关于范围的。如何使用任务填充变量,然后将该变量传递回ActivitySignup?您只需在返回中添加1
,您应该能够调整他的建议,不是吗?为了澄清,1
不是此过程的标准返回类型。@DIGIByte我想返回result
和message
,它们来自后端的云函数。我不想硬编码1,我想用Email和Password运行auth.createUsers,如果成功,则运行createUser云函数,该函数返回结果
和消息
。我希望将这些值(无论它们是什么)添加到ActivitySignup中,以便ActivitySignup上的代码非常干净。成功创建时没有结果或消息,它只是让您登录。它只会回来