【发布时间】:2021-08-17 20:01:03
【问题描述】:
在我的 ActivitySignup 中,我想调用 createUser 函数(来自我的 Firestore 类)。我希望createUser 将result 和message 返回到ActivitySignup。这将使我的 ActivitySignup 非常干净。我该怎么做?
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...
}
}
}
}
FS.createUser():
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)
}
【问题讨论】:
-
你得到的错误是不言自明的,因为你没有给结果参数任何初始值。您可以采取的不同操作是将回调方法传递给您的 createUser 函数并使其接受两个参数,结果和消息。
-
@tomerpacific 我应该提到我是初学者。不确定我是否理解您的建议。
标签: java android kotlin google-cloud-functions task