Pytanie Skąd mam wiedzieć, jakie dane są podane w pakiecie?


Mam trochę czasu, zastanawiając się, jakie dane docierają do moich metod Intent/Bundles. Próbowałem dodawać punkty przerwania w celu sprawdzenia danych, ale nic nie widzę. Być może dlatego, że jest Parcelable Nie mogę ręcznie przeczytać tego w Eclipse.

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ż, że nie jestem pytany o to, CO dane są dostępne, ale jak do cholery to rozumiem, więc mogę zastosować ten sam pomysł do każdego Bundle/Intent z platformy 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.


36
2018-06-24 23:28


pochodzenie




Odpowiedzi:


Bundle.keySet() daje listę wszystkich kluczy w pakiecie. To powiedziawszy, zazwyczaj po prostu oczekujesz pewnych kluczy i odpytujesz je, ale keySet() jest używany do sprawdzania pakietów, które otrzymujesz skądś.


72
2018-06-24 23:34



dzięki. Jak mogę WIEDZIEĆ, czego się spodziewać, to pytanie? Widzę teraz dokumentację na nim, prawda? - user123321
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
GDZIE czy dokumentacja dla rzeczy w pakiecie dla ContactsContract.Contacts.CONTENT_URI została uruchomiona przy użyciu startActivityForResult? - user123321
Nie jest on określony w dokumentach jako taki: nie należy na nim polegać. Możesz próbować być mądrym i używać Bundle.keySet aby zobaczyć, co jest w pakiecie po użyciu aplikacji kontaktów Google. Ale zgadnij co: Szanse są takie, że aplikacja kontaktów HTC zwraca inny pakiet. Lub MotoBlur. W twoim przypadku jedyną rzeczą, na której możesz polegać, są dane intencji, więc przeczytaj wynik w sposób opisany poniżej: stackoverflow.com/questions/866769/... .. Jakie informacje poza ID są ci potrzebne? - EboMike
Wydaje się mało prawdopodobne, że istnieje inny zestaw "standardowych" danych zwracanych w zależności od środowiska. Nie dbam o żadne specyficzne środowisko. Chcę wiedzieć, kto ma wiedzieć, jakie dane są dostępne dla moich procedur obsługi danych onCallback (dane intencyjne). Zapętlanie kluczy wydaje się dość ogólne i nie mogę uwierzyć, że Google pozostawiłoby to programistom, by sami się zorientowali. - user123321


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;
}

44
2017-11-20 13:19



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


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

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

wydajność:

(key)       :(value)    
profile_name:abc

4
2017-08-31 07:20





Jedyną rzeczą, którą dostajesz z Pakietu, jest 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ępnej czynności, musisz umieścić go jako Dodatek. Spójrz tutaj na przykład przekazywanie danych za pośrednictwem statystów i wiązek między działaniami.

Skopiowane i wklejone poniżej:

Z 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");

0
2018-06-24 23:32