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

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

Get object from intent throws null

问题

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

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

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

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

它实际上是存在的!

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

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

NombreUsuario  = (EditText) findViewById(R.id.UsuarioRegister);
PasswordPrimero  = (EditText) findViewById(R.id.PasswordPrimero);

Usuario obj = new Usuario(String.valueOf(NombreUsuario.getText()), String.valueOf(PasswordPrimero.getText()));

Intent intent = new Intent(getBaseContext(), MainActivity.class);
Usuario usuariocreado = new Usuario(String.valueOf(NombreUsuario.getText()), String.valueOf(PasswordPrimero.getText()));
intent.putExtra("usuariocreado", usuariocreado);
startActivity(intent);

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

我做错了什么?谢谢!

public class Usuario  implements Parcelable {

    public Usuario(String nombreUsuario, String passwordPrimero) {
        NombreUsuario = nombreUsuario;
        PasswordPrimero = passwordPrimero;
    }

    /**
     * NombreUsuario : Paco
     * PasswordPrimero : Example
     */

    private String NombreUsuario;
    private String PasswordPrimero;

    protected Usuario(Parcel in) {
        NombreUsuario = in.readString();
        PasswordPrimero = in.readString();
    }

    public static final Creator<Usuario> CREATOR = new Creator<Usuario>() {
        @Override
        public Usuario createFromParcel(Parcel in) {
            return new Usuario(in);
        }

        @Override
        public Usuario[] newArray(int size) {
            return new Usuario[size];
        }
    };

    public String getNombreUsuario() {
        return NombreUsuario;
    }

    public void setNombreUsuario(String NombreUsuario) {
        this.NombreUsuario = NombreUsuario;
    }

    public String getPasswordPrimero() {
        return PasswordPrimero;
    }

    public void setPasswordPrimero(String PasswordPrimero) {
        this.PasswordPrimero = PasswordPrimero;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(NombreUsuario);
        dest.writeString(PasswordPrimero);
    }
}
英文:

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!

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

This is the code on MainActivty which receives the intent.

NombreUsuario  = (EditText) findViewById(R.id.UsuarioRegister);
PasswordPrimero  = (EditText) findViewById(R.id.PasswordPrimero);

Usuario obj = new Usuario(String.valueOf(NombreUsuario.getText()), String.valueOf(PasswordPrimero.getText()));

Intent intent = new Intent(getBaseContext(), MainActivity.class);
Usuario usuariocreado = new Usuario(String.valueOf(NombreUsuario.getText()), String.valueOf(PasswordPrimero.getText()));
intent.putExtra(&quot;usuariocreado &quot;, usuariocreado);
startActivity(intent);

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

What am i doing wrong??

Thanks!

public class Usuario  implements Parcelable {


    public Usuario(String nombreUsuario, String passwordPrimero) {
        NombreUsuario = nombreUsuario;
        PasswordPrimero = passwordPrimero;
    }

    /**
     * NombreUsuario : Paco
     * PasswordPrimero : Example
     */

    private String NombreUsuario;
    private String PasswordPrimero;

    protected Usuario(Parcel in) {
        NombreUsuario = in.readString();
        PasswordPrimero = in.readString();
    }

    public static final Creator&lt;Usuario&gt; CREATOR = new Creator&lt;Usuario&gt;() {
        @Override
        public Usuario createFromParcel(Parcel in) {
            return new Usuario(in);
        }

        @Override
        public Usuario[] newArray(int size) {
            return new Usuario[size];
        }
    };

    public String getNombreUsuario() {
        return NombreUsuario;
    }

    public void setNombreUsuario(String NombreUsuario) {
        this.NombreUsuario = NombreUsuario;
    }

    public String getPasswordPrimero() {
        return PasswordPrimero;
    }

    public void setPasswordPrimero(String PasswordPrimero) {
        this.PasswordPrimero = PasswordPrimero;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(NombreUsuario);
        dest.writeString(PasswordPrimero);
    }
}

答案1

得分: 1

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

用以下代码替换

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

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

Replace

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

with

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:

确定