我是 Android 新手,并尝试创建将使用 startActivityForResult 和 onActivityResult 并返回结果的身份验证函数(在我的例子中是两个字符串的数组 - 来自登录屏幕的用户名和密码)。
这是我的代码(为用户名和密码返回 null)
在主要活动中(调用 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");
}
}
在登录活动中:
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() 和 notify(),使用单例)但无法让它工作......
我必须包装它,而不是像这样使用它,因为我想在更大的代码中使用 authenticate() 函数。任何不使用上述功能的解决方案也可以..
谢谢!