2012-04-02 8 views
0

Ich habe Probleme mit Bundles in einer AsyncTask. Ich habe zwei Strings, die ich an eine AsyncTask übergeben möchte. Ich möchte Pakete verwenden, um diese Aufgabe zu erledigen.Bundle in eine AsyncTask übergeben

Der Code im MainActivity:

Bundle adresses = new Bundle(); 
adresses.putString("to", textField1.getText().toString()); 
adresses.putString("from", textField2.getText().toString()); 

new PriceTask(getApplicationContext()).execute(adresses); 

Und in meinem AsycTask Ich mache es wie folgt aus:

protected Integer doInBackground(Bundle... b) { 

    Bundle result = b[0]; 
    String to = result.getString("to"); 
    String from = result.getString("from"); 

} 

Es ist erwähnenswert, dass meine zwei Strings enthält so etwas wie dieses

"Sometext here, and sometext here 1234" 

Put Ich kann den Text nicht abrufen, mein Debugger sagt, dass das Bundle die richtige Information enthält t Meine Zeichenfolge enthält nicht die richtigen Informationen. Wenn ich debuggen und Haltepunkte zu setzen, wo meine Strings sind, wird es nur den Wert:

[t, o] 

Was mache ich falsch hier? Danke im Voraus.

+0

Versuchen Sie, ändern durch '(Bündel b)' –

+0

Können Sie Ihren vollständigen Code für die Aync Taks – Deva

Antwort

1

In Haupttätigkeit ersetzen Sie die folgenden Zeilen ::

Bundle adresses = new Bundle(); 
adresses.putString("to", textField1.getText().toString()); 
adresses.putString("from", textField2.getText().toString()); 

new PriceTask(getApplicationContext()).execute(adresses); 

mit

new PriceTask(getApplicationContext(),textField1.getText().toString(),textField2.getText().toString()).execute(); 

Und in Ihrem AsycTask Konstruktor hinzufügen, wie unten ::

String; Zeichenfolge aus; Kontext Kontext;

public YourAsyncTask (Context Zusammenhang String, String von) { // TODO Auto-Stub erzeugt Konstruktor this._activity = _activity; this.to = zu; this.from = von; }

1

Was Sie falsch machen, ist die Art, wie Sie die Daten in der doInBackground Methode abrufen. Das Argument, dass Methode hat ist ein Array-Typ. Bitte beachten Sie die ... Was Sie in der Zeile Bundle result = b[0]; tun, ist nur das 0. Element dieses Array und übergeben Sie es an eine Bundle Referenz.

Ihr Code und Ihre Angaben reichen nicht aus, um eine perfekte Antwort zu geben. Wenn Sie alle Ihre Codes in derselben Java-Klasse verwenden, müssen Sie kein Bundle verwenden. Stattdessen können Sie eine ArrayList des Typs String erstellen, die Ihre Werte aus den TextFields enthält. Dann enthält doInBackground auch eine ArrayList als Methodenargument. Holen Sie sich dann alle Listenelemente und trennen Sie Ihre Werte von "bis" und "von".

Wenn Sie mit dem vorhandenen Code bleiben, versuchen Sie zuerst herauszufinden, was in der result Variable ist.

Verwandte Themen