5

我是 Android 新手,所以我可能会遗漏一些东西。我正在写一个“登录”活动。Activity 返回安全令牌供应用程序稍后使用。

一切正常。我不太喜欢的是用于返回结果的协议:

本质上,我的登录活动是这样使用的:

...
        login = (Button) findViewById(R.id.login);
        login.setOnClickListener(new View.OnClickListener()
        {
        public void onClick(View v)
        {
            Intent authActivity = new Intent(context,
                                             AuthenticationActivity.class);

            authActivity.putExtra("clientId","MY CLIENT ID");

            startActivityForResult(authActivity, AuthenticationActivity.AUTH_REQUEST_COMPLETE);
        }
    });

然后,我通过方法检索结果onActivityResult

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

    switch(requestCode)
    {
        case AuthenticationActivity.AUTH_REQUEST_COMPLETE:
            if(resultCode==RESULT_OK)
            {
               access_token =authActivityResult.getStringExtra(AuthenticationActivity.ACCESS_TOKEN)); ...

这是它应该做的方式吗?或者,还有更好的方法?例如,我想返回一个 Type 而不是使用属性包。这有很多优点(例如更容易重构、编译时检查等)

粗略地说,我希望看到类似(伪代码)的内容:

 startActivityForResult<MyResult>(authActivity, new OnResultHandler() { 
      @Override
      void HandleResult( MyResult r )
      {
         ....
      }
  });

很想听听 Android 专家的想法!

4

1 回答 1

3

我敢肯定,我们在 Android 中都有一些我们会以不同的方式完成的事情。这对于所有操作系统、编程语言、政治系统、经济系统、宗教等都是一样的。

但是,如果您想为 Android 编程,您几乎无法使用现有的东西。

要回答您的问题,您不必使用“财产包”将东西返回给调用活动。你可以将任何你想要的对象Intent作为额外的返回,只要它实现了Parcelableor Serializable

例如,假设MyResultimplements Parcelable,您AuthenticationActivity可以返回如下结果:

Intent resultIntent= new Intent();
resultIntent.putExtra(RESULT, myResult);
setResult(RESULT_OK, resultIntent);
finish();

并且调用活动可以像这样提取MyResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent authActivityResult) {
    super.onActivityResult(requestCode, resultCode, authActivityResult);
    switch(requestCode)
    {
        case AuthenticationActivity.AUTH_REQUEST_COMPLETE:
            if(resultCode==RESULT_OK)
            {
                MyResult result = authActivityResult.getParcelableExtra(AuthenticationActivity.RESULT));

现在你有了一个MyResult对象,你可以随心所欲地做任何事情。

于 2013-05-16T17:34:19.297 回答