gpt4 book ai didi

java - 将 startActivityForResult 和 onActivityResult 包装在一个返回结果的函数中

转载 作者:行者123 更新时间:2023-12-01 04:47:43 25 4
gpt4 key购买 nike

我是 Android 新手,正在尝试创建身份验证函数,该函数将使用 startActivityForResult 和 onActivityResult 并返回结果(在我的例子中是两个字符串的数组 - 来自登录屏幕的用户名和密码)。

这是我的代码(用户名和密码返回 null)

在主 Activity 中(调用authenticate()函数):

public String user;
public String pass;

public void startAuth(Intent i)
{
startActivityForResult(i, 1);
}

public String[] authenticate()
{
String[] ret = new String[2];
Intent i = new Intent(getApplicationContext(), LoginActivity.class);
startAuth(i);

ret[0] = i.getStringExtra("iUsername");
ret[1] = i.getStringExtra("iPassword");

return ret;
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (data.getExtras().containsKey("iUsername"))
{
user = data.getStringExtra("iUsername");
pass = data.getStringExtra("iPassword");
}
}

在登录 Activity 中:

public class LoginActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);

Button loginButton = (Button) findViewById(R.id.btnLogin);
final EditText username = (EditText) findViewById(R.id.username_fill);
final EditText password = (EditText) findViewById(R.id.password_fill);

// Listening to Login Button
loginButton.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {
Intent i = getIntent();
i.putExtra("iUsername", username.getText().toString());
i.putExtra("iPassword", password.getText().toString());

setResult(RESULT_OK, i);
finish();
}
});
}
}

我知道我需要以某种方式等待 onActivityResult 回调,但我尝试了不同的解决方案(使用 wait() 和 notification(),使用单例)但无法让它工作......

我必须包装它,而不是像这样使用它,因为我想在更大的代码中使用authenticate()函数。任何不使用上述功能的解决方案也可以..

谢谢!

最佳答案

无论您在哪里使用 authenticate()您实际上并不是在等待回复:

public void authenticate() // Changed return type to void
{
//String[] ret = new String[2];
Intent i = new Intent(getApplicationContext(), LoginActivity.class);
startAuth(i);

/*
* This code does nothing, the Intent you want is in onActivityResult()

ret[0] = i.getStringExtra("iUsername");
ret[1] = i.getStringExtra("iPassword");
return ret;
*/
}

你必须打破你的逻辑,以便当onActivityResult()时被称为它在 authenticate() 处恢复离开了。了解您无法在方法中间恢复。
所以你必须调用authenticate()在一种方法的末尾以及您使用 ret 的任何地方现在必须是从 onActivityResult() 调用的新方法.

关于java - 将 startActivityForResult 和 onActivityResult 包装在一个返回结果的函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15552919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com