2011-06-24 8 views
30

Mam heck czasu dowiedzieć się, jakie dane przychodzą do moich metod przez s. Intent/Bundle s. Próbowałem dodawać punkty przerwania w celu sprawdzenia danych, ale nic nie widzę. Być może dlatego, że jest to Parcelable Nie mogę ręcznie przeczytać tego w Eclipse.Skąd wiadomo, jakie dane są podane w pakiecie?

Na przykład: onActivityResult(int requestCode, int resultCode, Intent data) dla Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI). Skąd mam wiedzieć, jakie dane są dostępne? Zauważcie, nie pytam o to, CO dane są dostępne, ale jak do cholery mogę to zrozumieć, więc mogę zastosować ten sam pomysł do dowolnego Bundle/Intent ze środowiska Android? Być może jest to proste, patrząc na dokumenty, ale nie widzę pełnej listy danych i nie widzę ich w Eclipse. Więc jestem zagubiony.

Odpowiedz

64

Bundle.keySet() daje listę wszystkich kluczy w wiązki. Powiedziawszy to, zazwyczaj oczekujesz tylko pewnych kluczy i odpytujesz je, ale keySet() jest przydatny do zbadania pakietów, które możesz uzyskać skądś.

+0

dzięki. Jak mogę WIEDZIEĆ, czego się spodziewać, to pytanie? Widzę teraz dokumentację na nim, prawda? – user123321

+0

Pakiet to tak naprawdę tylko kontener. To całkowicie zależy od aplikacji, która go zapakowała. Jeśli jest to twoja własna, to jest to oczywiste - to wszystko, co wpiszesz. Jeśli to ktoś inny (lub z systemu operacyjnego), to zależy od tego, co wspomniana aplikacja włożyła. Opcja 1: Sprawdź dokumentację. Opcja 2: Zapytaj programistę aplikacji. Opcja 3: Użyj Bundle.keySet(), aby przeanalizować przychodzący pakiet. – EboMike

+0

** GDZIE ** jest dokumentacja dla rzeczy w pakiecie dla ContactsContract.Contacts.CONTENT_URI rozpoczęła się od startActivityForResult? – user123321

0

Jedyne, co można wydobyć z Pakietu, to to, co wkładasz. Pakiety to sposoby przekazywania informacji między działaniami. Jeśli jesteś odpowiedzialny za całą aplikację, nie powinieneś zaglądać do Pakietu przedmiotów, powinieneś je po prostu wziąć. Pomyśl o hashmapach ... jeśli nie znasz klucza, to nie możesz przeszukiwać hashmap.

Aby umieścić przedmiot w Pakiecie i przekazać go do następnego działania, musisz ustawić go jako Dodatek. Sprawdź przykład here na przykład przekazywania danych za pośrednictwem dodatków i pakietów między działaniami.

skopiowany i wklejony poniżej:

Od Activity1

Intent intent = new Intent(this,myActivity2.class); 
Bundle bundle = new Bundle(); 
bundle.putString(“myValue“, myValue); 
intent.putExtras(bundle); 
navigation.this.startActivity(intent); 

W Activity2

Bundle bundle = getIntent().getExtras(); 
act2MyValue= bundle.getString(“myValue“); 
39
public static String bundle2string(Bundle bundle) { 
    if (bundle == null) { 
     return null; 
    } 
    String string = "Bundle{"; 
    for (String key : bundle.keySet()) { 
     string += " " + key + " => " + bundle.get(key) + ";"; 
    } 
    string += " }Bundle"; 
    return string; 
} 
+5

Faceci tacy jak ty są powodem, dla którego jestem tak aktywny w SO, dając nam gotową kawę: P Dziękuję – khandelwaldeval

2

otrzymuję alll klucz i wartość pakietu przechowywane ...

for (String key : bundle.keySet()) { 
    string += " " + key + " => " + bundle.get(key) + ";"; 
} 

wyjściowa:

(key)  :(value)  
profile_name:abc 
Powiązane problemy