2013-03-16 4 views
12

Ich versuche derzeit, über einen REST-API-Aufruf erfasste Daten zu verarbeiten, die benötigten Informationen zu analysieren und diese Informationen an eine neue Aktivität weiterzuleiten . Ich verwende den asynchronen HTTP-Client von loopj.com für den REST-Client und verwende dann den folgenden Code für meine onClick und onCreate für die aktuellen bzw. zukünftigen Aktivitäten.Übergeben von Daten von einer Aktivität an eine andere mithilfe von Bundle - nicht in der zweiten Aktivität angezeigt

Eclipse gibt mir keine Fehler für irgendeinen meiner Code, aber wenn ich versuche, im Emulator zu laufen, bekomme ich nichts (d. H. Leerer weißer Bildschirm), wenn die neue Aktivität/Ansicht geöffnet wird. Ich habe versucht, mit einer anderen URL in meinem REST CLIENT zu codieren, aber ich sehe immer noch nichts. Ich habe sogar den API-Aufruf aus der Gleichung herausgenommen, indem ich das try/catch in onClick auskommentiert habe und venueName in bundle.putString("VENUE_NAME", venueName); zu searchTerm geändert habe. Trotzdem wird die neue Ansicht angezeigt, aber nichts wird angezeigt. Was wird nicht weitergegeben, oder was vergesse ich, dass die zweite Aktivität die venueName zeigt?

public void onClick(View view) { 
    Intent i = new Intent(this, ResultsView.class); 
    EditText editText = (EditText) findViewById(R.id.edit_message); 
    String searchTerm = editText.getText().toString(); 


    //call the getFactualResults method 
    try { 
     getFactualResults(searchTerm); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    //Create the bundle 
    Bundle bundle = new Bundle(); 
    //Add your data from getFactualResults method to bundle 
    bundle.putString("VENUE_NAME", venueName); 
    //Add the bundle to the intent 
    i.putExtras(bundle); 

    //Fire the second activity 
    startActivity(i); 
} 

Methode in der zweiten Aktivität, die die Absicht erhalten soll und bündeln und angezeigt werden:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    //Get the message from the intent 
    //Intent intent = getIntent(); 
    //String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); 

    //Get the bundle 
    Bundle bundle = getIntent().getExtras(); 

    //Extract the data… 
    String venName = bundle.getString(MainActivity.VENUE_NAME);   

    //Create the text view 
    TextView textView = new TextView(this); 
    textView.setTextSize(40); 
    textView.setText(venName); 

    //set the text view as the activity layout 
    setContentView(textView); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
     getActionBar().setDisplayHomeAsUpEnabled(true); 
    } 
} 

Vielen Dank für Ihre Hilfe. Sehr geschätzt.

Antwort

10

Zwei Möglichkeiten erhalten Sie die Daten senden können. So senden Sie es im Moment. Und daran ist nichts falsch.

//Create the bundle 
Bundle bundle = new Bundle(); 
//Add your data from getFactualResults method to bundle 
bundle.putString("VENUE_NAME", venueName); 
//Add the bundle to the intent 
i.putExtras(bundle); 
startActivity(i); 

In Ihrem Code (zweite Aktivität) jedoch unter Bezugnahme Sie auf die key im Bundle als MainActivity.VENUE_NAME aber nichts im Code lässt vermuten, dass Sie eine Klasse, die den Wert als die tatsächliche key Name mit der schicken zurück Bündeln. Ändern Sie den Code in der zweiten Aktivität dazu:

Bundle bundle = getIntent().getExtras(); 

//Extract the data… 
String venName = bundle.getString("VENUE_NAME");   

//Create the text view 
TextView textView = new TextView(this); 
textView.setTextSize(40); 
textView.setText(venName); 

Sie können in Ihrem zweiten Aktivität überprüfen, ob das Bundle mit dem Schlüssel dieses enthält, und Sie werden wissen, dass die key im Bundle nicht vorhanden ist. Die Korrektur oben wird jedoch für Sie arbeiten.

if (bundle.containsKey(MainActivity.VENUE_NAME)) { 
    .... 
} 
+1

Dies ist eine wirklich großartige, kurze und dennoch detaillierte Antwort. Danke, dass du das so klar geschrieben hast. Es half mir zu verstehen, wie man Bundles sehr schnell verwendet. – raddevus

+0

Danke. Das Beispiel hat mir geholfen. – Edwinfad

0

Stellen Sie sicher, dass die Zeichenfolge, die Sie als Schlüssel zum Einfügen des Elements in Ihr Bundle verwendet haben, mit dem Schlüssel identisch ist, der zum Extrahieren des Elements verwendet wurde. In Ihrem Fall ist vielleicht MainActivity.VENUE_NAME nicht dasselbe wie "VENUE_NAME"

1

zu senden Bundle.

Bundle bundle = new Bundle(); 
bundle.putString("Name",Object); //This is for a String 
i.setClass(CurrentClass.this, Class.class); 
i.putExtras(bundle); 
startActivity(i); 

Bündel

Bundle bundle = null; 
bundle = this.getIntent().getExtras(); 
String myString = bundle.getString("Name");//this is for String 
+0

Hier was ist "ich". Bitte erläutern Sie die Bedeutung von I –

+0

Wenn Sie Absicht definieren i = new Intent(); Ich versuche es schon. Bitte erkläre deine Antwort. –

2

Sie greifen fälschlicherweise auf den Schlüssel zu, den Sie im Paket hinzugefügt haben.Neben immer den String als MainActivity.VENUE_NAME versuchen, direkt auf den Schlüsselnamen übergeben, die Sie im Bündel hinzugefügt haben, wie unten:

Neben String immer wie folgt:

//Get the bundle 
    Bundle bundle = getIntent().getExtras(); 
    //Extract the data… 
    String venName = bundle.getString(MainActivity.VENUE_NAME);   

Versuchen Sie, die Zeichenfolge erhalten Schlüssel wie unten nennen:

/Get the bundle 
    Bundle bundle = getIntent().getExtras(); 
    //Extract the data… 
    String venName = bundle.getString("VENUE_NAME"); 
4

ich denke, wenn Sie

ersetzen
String venName = bundle.getString(MainActivity.VENUE_NAME); 

mit

String venName = bundle.getString("VENUE_NAME"); 

sollte es funktionieren.

Hier ist, wie ich meine Übertragung von Daten von einer Aktivität zur nächsten Griff:

Daten zur Aktivität Senden als "Projectviewoptions":

Bundle b = new Bundle(); 
      b.putString("id", str_projectid); 
      Projectviewoptions pv = new Projectviewoptions(); 

Empfangen von Daten:

idbundle = getArguments(); 
String myid = idbundle.getString("id"); 

Die "Schlüssel" auf beiden Seiten sollte gleich sein; in diesem Fall "id".

Eine weitere Möglichkeit, Daten zu senden, durch Absicht ist:

Senden:

Intent intent = new Intent(getActivity(),ViewProjectDetails.class); 
          intent.putExtra("id", myid); 
          startActivity(intent); 

Recieve:

String id = getIntent().getExtras().getString("id"); 
0

Intent loginIntent = new Intent (LoginActivity.this, HomeActivity. Klasse);

Bundle Bundle = neues Bundle();

bundle.putString ("Benutzer-ID", Benutzer-ID);

i.putExtras (Bündel);

startActivity (loginIntent);

LoginActivity.this.finish();

Verwandte Themen