简体   繁体   English

MainActivity上的onActivityResult Intent为null

[英]onActivityResult Intent is null on MainActivity

My main activity launches a login activity. 我的主要活动启动了登录活动。 The ApiResponseHandler object calls activity.finish() if the user is successfully logged in. It seems as though everything is done correctly. 如果用户成功登录,则ApiResponseHandler对象将调用activity.finish() 。似乎一切ApiResponseHandler正确完成。 I can't see any gaps in my passing the intent that might cause it to be null . 我看不到传递意图可能导致其为null任何差距。

The point of error is noted by a comment below within MainActivity 错误要点在MainActivity以下注释中指出

    public class MainActivity extends Activity {
        static final int LOGIN_INTENT_ID = 0;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            //launch login activity
            startActivityForResult(new Intent(this, LoginActivity.class), LOGIN_INTENT_ID);
        }

        protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
            super.onActivityResult(requestCode, resultCode, intent);

            //handle activity response
            if (requestCode == LOGIN_INTENT_ID) {
                if (resultCode == Activity.RESULT_OK) {
//intent is null, so .getSerializableExtra() fails
                    User user = (User) intent.getSerializableExtra("User");
                    Toast.makeText(getApplicationContext(), "Logged in as: " + user.getFirstName() + " " + user.getLastName(), Toast.LENGTH_SHORT).show();
                }
            }
        }
    }

My Login activity: 我的登录活动:

public class LoginActivity extends Activity {
    public static final Logger logger = Logger.getLogger(LoginActivity.class.getName());

    Button      loginButton;
    EditText    loginField;
    EditText    passwordField;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);

        loginButton = (Button)findViewById(R.id.loginFormLabelButton_Login);
        loginField = (EditText)findViewById(R.id.loginFormLogin);
        passwordField = (EditText)findViewById(R.id.loginFormPassword);
    }

    /**
     * Login a user when the button is clicked
     * @param v
     */
    public void logUserIn(View v) {
        loginButton.setText(R.string.loginFormLabelButton_Login_Working);

        ApiRequest request = new ApiRequest();

        request.setLogin(loginField.getText().toString());
        request.setPassword(passwordField.getText().toString());

        if (request.getLogin().length() == 0) {
            showErrorDialog(getString(R.string.loginErrorDialog_LoginRequired));
            return;
        }
        if (request.getPassword().length() == 0) {
            showErrorDialog(getString(R.string.loginErrorDialog_PasswordRequired));
            return;
        }

        //make request and handle results
        ApiRequestHandler<User> apiHandler = new ApiRequestHandler<User>(User.class);
        apiHandler.setUrl(getString(R.string.loginFormApiUrl));
        apiHandler.setApiRequest(request);
        apiHandler.setResponseHandler(new ApiResponseHandler(this, getIntent()));
        apiHandler.execute();

        loginButton.setText(R.string.loginFormLabelButton_Login);
    }

    ....
}

The new ApiResponseHandler(this, getIntent()) looks like this... new ApiResponseHandler(this, getIntent())看起来像这样...

public class ApiResponseHandler implements com.Bible_Bowl_Management.Api.ApiResponseHandler<User> {
    private Activity activity;
    private Intent intent;

    public ApiResponseHandler(Activity activity, Intent intent) {
        this.activity = activity;
        this.intent = intent;
    }

    @Override
    public void ResponseSuccessful(User user) {
        intent.putExtra("User", user);
        activity.setResult(Activity.RESULT_OK);
        activity.finish();
    }

    @Override
    public void ResponseNoContent() {
        Toast.makeText(this.activity.getApplicationContext(), "No account found with these credentials", Toast.LENGTH_LONG).show();
    }
}

You are passing getIntent() as Intent to return to the Activity 您正在传递getIntent()作为返回活动的意图

You should create a new Intent object for this. 您应该为此创建一个新的Intent对象。

For example: 例如:

  Intent returnIntent = new Intent();
  returnIntent.putExtra("SelectedBook",book);
  setResult(RESULT_OK,returnIntent);       

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM