Übergeben Sie ArrayList

Lesezeit: 3 Minuten

Ubergeben Sie ArrayList
Adrian Jandl

Ich habe ein paar Themen durchsucht, aber keine Lösung für mein Problem gefunden.

public class Series implements Parcelable {
private String name;
private int numOfSeason;
private int numOfEpisode;

/** Constructors and Getters/Setters have been removed to make reading easier **/

public Series(Parcel in) {
    String[] data = new String[3];
    in.readStringArray(data);
    this.name = data[0];
    this.numOfSeason = Integer.parseInt(data[1]);
    this.numOfEpisode = Integer.parseInt(data[2]);
}


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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeStringArray(new String[] { this.name,
            String.valueOf(this.numOfSeason),
            String.valueOf(this.numOfEpisode) });

}

private void readFromParcel(Parcel in) {
    name = in.readString();
    numOfSeason = in.readInt();
    numOfEpisode = in.readInt();
}

public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
    @Override
    public Series createFromParcel(Parcel in) {
        return new Series(in);
    }

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

}

In meiner MainActivity habe ich eine ArrayList. Um die Liste dynamisch bearbeitbar zu machen, muss ich sie an eine andere Aktivität übergeben, wo ich sie bearbeiten kann.

ArrayList<Series> listOfSeries = new ArrayList<Series>();

    public void openAddActivity() {
    Intent intent = new Intent(this, AddActivity.class);
    intent.putParcelableArrayListExtra(
            "com.example.episodetracker.listofseries",
            (ArrayList<? extends Parcelable>) listOfSeries);
    startActivity(intent);
}

Ich muss die Liste umwandeln, sonst gibt mir Eclipse die folgende Fehlermeldung.
Die Methode putParcelableArrayListExtra(String, ArrayList) im Typ Intent ist für die Argumente (String, List) nicht anwendbar.

Ist dies der richtige Weg?

    ArrayList<Series> list = savedInstanceState
            .getParcelableArrayList("com.example.episodetracker.listofseries");

Auf diese Weise versuche ich, die Daten in einer anderen Aktivität zu lesen.

Es stürzt in der Zeile darüber ab. nämlich der getParcelableArrayList-Teil.

  • 1/ Ich verstehe nicht, was in Ihrem Code nicht funktioniert. 2/ Speichern Sie die Listen nicht irgendwo? Wäre es daher nicht am besten, an der Datenbank zu arbeiten, anstatt an einem Array, das Sie von Aktivität zu Aktivität übergeben?

    – njzk2

    28. Februar 13 um 10:38 Uhr

  • Parcelables sind sozusagen der Teufel … haben Sie versucht, sie stattdessen serialisierbar zu machen?

    – Schneekrabben

    28. Februar 13 um 14:27 Uhr

  • Ich hatte den Eindruck, dass Parcelable der richtige Weg ist, da Serializable viel langsamer ist?

    – Adrian Jandl

    28. Februar 13 um 14:31 Uhr

  • Parcelable erleichtert komplexe Klassen. Von wie vielen Dateneingaben sprechen wir in Bezug auf die Geschwindigkeit?

    – Schneekrabben

    28. Februar 13 um 14:54 Uhr

  • Eine ArrayList mit ~10 Einträgen, wobei jeder Eintrag 3 Memvars hat.

    – Adrian Jandl

    28. Februar 13 um 14:57 Uhr

1643040185 311 Ubergeben Sie ArrayList
Schneekrabben

  • Das Problem besteht darin, auf das Paket zu schreiben und aus dem Paket einzulesen …

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(numOfSeason);
        dest.writeInt(numOfEpisode);
    }
    
    private void readFromParcel(Parcel in) {
        name = in.readString();
        numOfSeason = in.readInt();
        numOfEpisode = in.readInt();
    }
    
  • Was Sie ausschreiben, muss mit dem übereinstimmen, was Sie einlesen…

    @Override
     protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    Intent i = new Intent(this,SecondActivity.class);
    
    ArrayList<testparcel> testing = new ArrayList<testparcel>();
    
    i.putParcelableArrayListExtra("extraextra", testing);
    startActivity(i);
    }
    
        /**********************************************/
    
    
    public class SecondActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        ArrayList<testparcel> testing = this.getIntent().getParcelableArrayListExtra("extraextra");
     }
    }
    
  • Der obige Code hat onCreate() von zwei verschiedenen Aktivitäten. Der erste startet den zweiten; und es funktioniert gut. Ich konnte das Paket ohne Probleme ziehen.

  • Änderte es. Die NullPointerException bleibt jedoch bestehen. Habe in diesem Teil aber nichts geändert ` ArrayList list = savedInstanceState .getParcelableArrayList(“com.example.episodetracker.listofseries”);`

    – Adrian Jandl

    28. Februar 13 um 14:50 Uhr


  • Der Name im Bundle spielt keine Rolle, Sie könnten es “MyArray” als Schlüssel nennen und es sollte funktionieren. Auf welcher Leitung stürzt es ab?

    – Schneekrabben

    28. Februar 13 um 14:59 Uhr

  • Absturz in der Zeile, in der ich meine neue Aktivität “lade”. Insbesondere diese Zeile: ArrayList list = savedInstanceState .getParcelableArrayList(“com.example.episodetracker.listofseries”);`

    – Adrian Jandl

    28. Februar 13 um 15:03 Uhr


  • Sie müssen von der Absicht aus aufrufen, nicht von savedInstanceState

    – Schneekrabben

    28. Februar 13 um 15:12 Uhr

  • Ich habe mich eine Stunde im Kreis gedreht…bis auf die Bestellung war alles perfekt…

    – mich_

    27. Juli 18 um 23:28 Uhr

Sie sollten die verwenden putParcelableArrayListExtra() Methode auf der Intent Klasse.

  • intent.putParcelableArrayListExtra( "com.example.episodetracker.listofseries", (ArrayList<? extends Parcelable>) listOfSeries); ist dies der richtige Weg, es zu tun? Wenn ich es nicht umsetze, erhalte ich die folgende Fehlermeldung: Die Methode putParcelableArrayListExtra(String, ArrayList) im Typ Intent ist für die Argumente (String, List) nicht anwendbar.

    – Adrian Jandl

    28. Februar 13 um 11:35 Uhr

  • erkläre deine listOfSeries wie ArrayList nicht List.

    – Ovidiu Latcu

    28. Februar 13 um 13:38 Uhr

  • Okay, das hat den Compiler glücklich gemacht. Das Programm stürzt jedoch immer noch ab, wenn ich versuche, die Daten auszulesen. Ich habe den ursprünglichen Beitrag mit einem Logcat-Snippet aktualisiert.

    – Adrian Jandl

    28. Februar 13 um 14:19 Uhr


Ich habe verwendet putParcelableArrayList(<? extends Parcelable>) von einem Bundle Objekt. Nicht direkt von einem Absichtsobjekt. (Ich weiß nicht wirklich, was der Unterschied ist). aber ich verwende auf diese Weise:

ArrayList<ParcelableRow> resultSet = new ArrayList<ParcelableRow>();
resultSet = loadData();

Bundle data = new Bundle();
data.putParcelableArrayList("search.resultSet", resultSet);
yourIntent.putExtra("result.content", data);
startActivity(yourIntent);

Später können Sie bei Ihrer neuen Aktivität die kürzlich in das Bundle-Objekt eingefügten Daten wie folgt ausfüllen:

Bundle data = this.getIntent().getBundleExtra("result.content");
ArrayList<ParcelableRow> result = data.getParcelableArrayList("search.resultset");

Denken Sie daran, dass Ihre ArrayList<> darf nur parzellierbare Gegenstände enthalten. und nur um sicherzustellen, dass Sie die Daten übergeben haben, können Sie überprüfen, ob die empfangenen Daten null sind oder nicht, nur um Probleme zu vermeiden.

Vielleicht hilft das jemandem. Sonst war mein Problem, dass ich write und readValue verwendet habe, aber es sollte mit Typen wie writeInt, readInt, writeString, readString und so weiter übereinstimmen

Ubergeben Sie ArrayList
Zar E. Ahmer

Ich mache es auf diese Weise:

var intent = Intent(this@McqActivity,ResultActivity::class.java)
intent.putParcelableArrayListExtra("keyResults", ArrayList(resultList)) 
// resultList  is of type mutableListOf<ResultBO>()  
 startActivity(intent)

Und für die Herstellung Klasse Paketierbar . Ich tue es einfach two operation zuerst habe ich verwendet @ Paket Annotation über meiner Datenklasse und zweitens vererbe ich sie mit Parcelable Wie unten..

import kotlinx.android.parcel.Parcelize
import android.os.Parcelable

@Parcelize // Include Annotion 
data class ResultBO(val questionBO: QuestionBO) : Parcelable {
    constructor() : this(QuestionBO())
}

Und am empfangenden Ende

if (intent != null) {
     var results = intent.getParcelableArrayListExtra<Parcelable>("keyResults")
}

1643040186 493 Ubergeben Sie ArrayList
DEVENDRA SINGH

Sie können Parcelable ArrayList übergeben

Absenderaktivität ->

startActivity(Intent(this, SenderActivity::class.java).apply { putExtra("getList",list)})

Empfängeraktivität ->

private lateinit var list: ArrayList<List>

list = this.intent.extras?.getParcelableArrayList("getList")!!

Und Sie erhalten alle Arraylisten in der Liste.

.

620170cookie-checkÜbergeben Sie ArrayList

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy