私はAndroidが初めてで、startActivityForResultとonActivityResultを使用して結果を返す認証関数を作成しようとしています(私の場合、2つの文字列の配列-ログイン画面からのユーザー名とパスワード)。
これが私のコードです(ユーザー名とパスワードに対して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");
}
}
loginActivity では:
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() 関数を使用したいからです。上記の関数を使用しないソリューションも問題ありません..
ありがとう!