Странный результат на Double от активности к активности - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь передать Arralyist некоторого Объекта с параметром Double из одного действия в другое, но после его отправки результат Double не совпадает.My Object Producto реализует пакет:

import android.os.Parcel;
import android.os.Parcelable;

public class Producto implements Parcelable {
private String nombre, descripcion, url, tipo;
private Double precio;
private int cantidad;

public Producto(String nombre, String descripcion, Double precio, String url,  String tipo){
    this.nombre = nombre;
    this.descripcion = descripcion;
    this.precio = precio;
    this.tipo = tipo;
    this.url = url;
}

protected Producto(Parcel in){
    nombre = in.readString();
    descripcion = in.readString();
    url = in.readString();
    tipo = in.readString();
    precio = in.readDouble();
    cantidad = in.readInt();
}

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

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

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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(nombre);
    dest.writeString(descripcion);
    dest.writeString(url);
    dest.writeString(tipo);
    dest.writeInt(cantidad);
    dest.writeDouble(precio);
}

public static Creator<Producto> getCreator(){
    return CREATOR;
}

}

Я пытаюсь отправить его на следующее задание внутри массива продуктов.Первое задание

                        for (DocumentSnapshot doc: listadoProductos
                             ) {
                                p = new Producto(doc.getString("Nombre"), doc.getString("Descripcion"),
                                        doc.getDouble("Precio"), doc.getString("url2"), doc.getString("Tipo"));
                                nombres.add(p);
                        }
                        Intent intent = new Intent(getApplicationContext(), Productos.class);
                        intent.putParcelableArrayListExtra("nombres",nombres);
startActivity(intent);

И я проверил, что в данный момент значения Precio в порядке, в моем случае 8,92

Но когда я получил массив в новом занятии,значения не совпадают

Второе действие

ArrayList<Producto> listadoProductos = new ArrayList<>()
Intent intent = getIntent();
        if (intent.getParcelableArrayListExtra("nombres")!= null) {
            listadoProductos = intent.getParcelableArrayListExtra("nombres");

Здесь новое значение - 9.458744551493758E-13. Любой может объяснить, что происходит и как получить реальное значение 8,92?

1 Ответ

1 голос
/ 25 сентября 2019

При работе с parcelable у вас должен быть правильный порядок на месте.

При чтении ваших полей вы должны иметь тот же порядок, в котором вы их писали.Вот вам:

// writing: first cantidad then precio
dest.writeInt(cantidad);
dest.writeDouble(precio);

// reading is reversed.
precio = in.readDouble();
cantidad = in.readInt();

просто поменяйте порядок

cantidad = in.readInt();
precio = in.readDouble();

И все должно работать

...