Napisałem aplikację, która ma <intent-filter/>
, aby inne aplikacje mogły ją uruchamiać za pomocą startActivityForResult()
. Po zakończeniu tej czynności utworzył obiekt, który wygląda następująco:
(Aplikacja A)
public class MyObject implements Serializable {
private String name;
private String[] items
}
I ustaw to na wynik:
(Aplikacja A)
getIntent().putExtra("Extra_MyObject", myObject);
setResult(RESULT_OK, getIntent());
Tak więc druga aktywność, która odbiera tę intencję, ma problem: skąd zna nazwę dodatkowej intencji do otrzymania i jak mam utworzyć otrzymany obiekt i przesłać go z powrotem do MyObject
, który nie jest częścią tej aplikacji?
(Aplikacja B)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == MY_REQ_CODE){
if(resultCode == RESULT_OK){
// So here how do I know what the intent data name is i.e. "Extra_MyObject"
// and how would I know the structure to cast the object back to a MyObject that isn't part of this project?
}
}
}
Czy po prostu naśladuję klasę MyObject
w drugiej aplikacji i rzutuję ją na nią? czy są inne opcje?
2 odpowiedzi
Możesz użyć biblioteki takiej jak Jackson do serializacji obiektu do ciągu JSON, który następnie deserializujesz na drugim końcu .
Jest znacznie bardziej elastyczny i wyeliminuje problem przekazywania niespójnych wersji Twoich danych, jeśli zdecydujesz się dodać np. dodatkowe pole.
Ponadto te dwie aplikacje nie muszą już utrzymywać klasy w tej samej przestrzeni nazw ani nawet nazywać ich tą samą nazwą.
I na koniec, nie musisz już publikować słoika, wystarczy tylko twoja dokumentacja.
skąd zna nazwę dodatkowego zamiaru do otrzymania?
Czytając dokumentację API opublikowaną przez autora pierwszej aplikacji.
jak utworzyć otrzymany obiekt i przerzucić go z powrotem do MyObject, który nie jest częścią tej aplikacji?
Autorzy pierwszej aplikacji musieliby również opublikować plik JAR zawierający implementację MyObject
, który autorzy drugiej aplikacji dodają do swojego projektu. A autorzy pierwszej aplikacji albo nigdy nie musieliby zmieniać MyObject
, albo przynajmniej upewniać się, że wersjonowanie serializacji działa.
Czy po prostu naśladuję klasę MyObject w drugiej aplikacji i rzutuję ją na to?
Jeśli przez „naśladować” masz na myśli „masz klasę z dokładnie taką samą nazwą klasy, dokładnie taką samą nazwą pakietu i dokładnie taką samą logiką serializacji”, to tak, chociaż jestem wtedy zaniepokojony użyciem terminu „tylko”. :-)
Jeśli MyObject
ma strukturę, którą opisujesz, rozważ po prostu umieszczenie String
i String[]
jako osobnych dodatków lub umieść je w Bundle
i użyj tego jako dodatku, aby uniknąć próbuje użyć niestandardowych obiektów Parcelable
między aplikacjami.
Podobne pytania
Nowe pytania
android
Android to mobilny system operacyjny Google, używany do programowania lub tworzenia urządzeń cyfrowych (smartfony, tablety, samochody, telewizory, Wear, Glass, IoT). W przypadku tematów związanych z Androidem użyj tagów specyficznych dla Androida, takich jak android-intent, android-activity, android-adapter itp. W przypadku pytań innych niż programowanie lub programowanie, ale związanych ze strukturą Androida, użyj tego linku: https: // android.stackexchange.com.