从意图获取对象时抛出空值异常。

huangapple go评论89阅读模式
英文:

Get object from intent throws null

问题

我正在尝试使用意图传递对象到另一个类。该对象实现了Parcelable接口。

问题是,当我尝试获取属性时,它无法获取到对象,显示为空。

但是当我对intent.getExtras()执行System.out.println时:

Bundle[{usuariocreado =com.example.frpi.repasando.Usuario@4ed1d39}]

它实际上是存在的!

  1. if (this.getIntent().getExtras() != null) {
  2. Usuario usuariocreado = intent.getParcelableExtra("usuariocreado");
  3. usuariocreado.getNombreUsuario();
  4. } else {
  5. System.out.println("Mierda");
  6. }

这是接收意图的MainActivity上的代码。

  1. NombreUsuario = (EditText) findViewById(R.id.UsuarioRegister);
  2. PasswordPrimero = (EditText) findViewById(R.id.PasswordPrimero);
  3. Usuario obj = new Usuario(String.valueOf(NombreUsuario.getText()), String.valueOf(PasswordPrimero.getText()));
  4. Intent intent = new Intent(getBaseContext(), MainActivity.class);
  5. Usuario usuariocreado = new Usuario(String.valueOf(NombreUsuario.getText()), String.valueOf(PasswordPrimero.getText()));
  6. intent.putExtra("usuariocreado", usuariocreado);
  7. startActivity(intent);

这是发送意图的SecondActivity上的代码。

我做错了什么?谢谢!

  1. public class Usuario implements Parcelable {
  2. public Usuario(String nombreUsuario, String passwordPrimero) {
  3. NombreUsuario = nombreUsuario;
  4. PasswordPrimero = passwordPrimero;
  5. }
  6. /**
  7. * NombreUsuario : Paco
  8. * PasswordPrimero : Example
  9. */
  10. private String NombreUsuario;
  11. private String PasswordPrimero;
  12. protected Usuario(Parcel in) {
  13. NombreUsuario = in.readString();
  14. PasswordPrimero = in.readString();
  15. }
  16. public static final Creator<Usuario> CREATOR = new Creator<Usuario>() {
  17. @Override
  18. public Usuario createFromParcel(Parcel in) {
  19. return new Usuario(in);
  20. }
  21. @Override
  22. public Usuario[] newArray(int size) {
  23. return new Usuario[size];
  24. }
  25. };
  26. public String getNombreUsuario() {
  27. return NombreUsuario;
  28. }
  29. public void setNombreUsuario(String NombreUsuario) {
  30. this.NombreUsuario = NombreUsuario;
  31. }
  32. public String getPasswordPrimero() {
  33. return PasswordPrimero;
  34. }
  35. public void setPasswordPrimero(String PasswordPrimero) {
  36. this.PasswordPrimero = PasswordPrimero;
  37. }
  38. @Override
  39. public int describeContents() {
  40. return 0;
  41. }
  42. @Override
  43. public void writeToParcel(Parcel dest, int flags) {
  44. dest.writeString(NombreUsuario);
  45. dest.writeString(PasswordPrimero);
  46. }
  47. }
英文:

I am trying to pass an object to another class using intent. The object implements Parcelable.

The thing is, when I try to get the attributes it doesn't get the object, it says it's null.

But when I do a System.out.println of the intent.getExtras():

Bundle[{usuariocreado =com.example.frpi.repasando.Usuario@4ed1d39}]

It's actually there!

  1. if (this.getIntent().getExtras() != null) {
  2. Usuario usuariocreado = intent.getParcelableExtra(&quot;usuariocreado&quot;);
  3. usuariocreado.getNombreUsuario();
  4. } else {
  5. System.out.println(&quot;Mierda&quot;);
  6. }

This is the code on MainActivty which receives the intent.

  1. NombreUsuario = (EditText) findViewById(R.id.UsuarioRegister);
  2. PasswordPrimero = (EditText) findViewById(R.id.PasswordPrimero);
  3. Usuario obj = new Usuario(String.valueOf(NombreUsuario.getText()), String.valueOf(PasswordPrimero.getText()));
  4. Intent intent = new Intent(getBaseContext(), MainActivity.class);
  5. Usuario usuariocreado = new Usuario(String.valueOf(NombreUsuario.getText()), String.valueOf(PasswordPrimero.getText()));
  6. intent.putExtra(&quot;usuariocreado &quot;, usuariocreado);
  7. startActivity(intent);

This is the code on the SecondActivity which sends the intent.

What am i doing wrong??

Thanks!

  1. public class Usuario implements Parcelable {
  2. public Usuario(String nombreUsuario, String passwordPrimero) {
  3. NombreUsuario = nombreUsuario;
  4. PasswordPrimero = passwordPrimero;
  5. }
  6. /**
  7. * NombreUsuario : Paco
  8. * PasswordPrimero : Example
  9. */
  10. private String NombreUsuario;
  11. private String PasswordPrimero;
  12. protected Usuario(Parcel in) {
  13. NombreUsuario = in.readString();
  14. PasswordPrimero = in.readString();
  15. }
  16. public static final Creator&lt;Usuario&gt; CREATOR = new Creator&lt;Usuario&gt;() {
  17. @Override
  18. public Usuario createFromParcel(Parcel in) {
  19. return new Usuario(in);
  20. }
  21. @Override
  22. public Usuario[] newArray(int size) {
  23. return new Usuario[size];
  24. }
  25. };
  26. public String getNombreUsuario() {
  27. return NombreUsuario;
  28. }
  29. public void setNombreUsuario(String NombreUsuario) {
  30. this.NombreUsuario = NombreUsuario;
  31. }
  32. public String getPasswordPrimero() {
  33. return PasswordPrimero;
  34. }
  35. public void setPasswordPrimero(String PasswordPrimero) {
  36. this.PasswordPrimero = PasswordPrimero;
  37. }
  38. @Override
  39. public int describeContents() {
  40. return 0;
  41. }
  42. @Override
  43. public void writeToParcel(Parcel dest, int flags) {
  44. dest.writeString(NombreUsuario);
  45. dest.writeString(PasswordPrimero);
  46. }
  47. }

答案1

得分: 1

你需要将intent.getParcelableExtra("usuariocreado") 强制转换为 Usuario 类型

用以下代码替换

  1. Usuario usuariocreado = (Usuario) intent.getParcelableExtra("usuariocreado");
英文:

You have to cast the intent.getParcelableExtra(&quot;usuariocreado&quot;) with Usuario

Replace

  1. Usuario usuariocreado = intent.getParcelableExtra(&quot;usuariocreado&quot;);

with

  1. Usuario usuariocreado = ((Usuario) intent.getParcelableExtra(&quot;usuariocreado&quot;));

huangapple
  • 本文由 发表于 2020年10月16日 01:39:56
  • 转载请务必保留本文链接:https://go.coder-hub.com/64376997.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定