Dans mon application, j'essaie de transmettre un objet sérialisable via une intention à une autre activité. L'intention n'est pas entièrement créée par moi, elle est créée et transmise à travers une suggestion de recherche.Objet sérialisable dans l'intention renvoyant sous forme de chaîne
Dans le fournisseur de contenu pour la suggestion de recherche, l'objet est créé et placé dans la colonne SUGGEST_COLUMN_INTENT_EXTRA_DATA
de MatrixCursor. Cependant, lorsque dans l'activité de réception j'appelle getIntent().getSerializableExtra(SearchManager.EXTRA_DATA_KEY)
, l'objet retourné est de type String et je ne peux pas le convertir dans la classe d'objet d'origine.
J'ai essayé de créer un wrapper parcelable pour mon objet qui appelle out.writeSerializable(...)
et l'utilise à la place mais la même chose s'est produite.
La chaîne renvoyée est semblable à Object toString générique(), c'est-à-dire [email protected]
, donc je suppose que toString() est appelée quelque part où je n'ai aucun contrôle.
J'espère qu'il me manquera quelque chose de simple. Merci pour l'aide!
Edit: Certains de mon code
Ceci est le fournisseur de contenu qui agit en tant qu'autorité de recherche:
//These are the search suggestion columns
private static final String[] COLUMNS = {
"_id", // mandatory column
SearchManager.SUGGEST_COLUMN_TEXT_1,
SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA
};
//This places the serializable or parcelable object (and other info) into the search suggestion
private Cursor getSuggestions(String query, String[] projection) {
List<Widget> widgets = WidgetLoader.getMatches(query);
MatrixCursor cursor = new MatrixCursor(COLUMNS);
for (Widget w : widgets) {
cursor.addRow(new Object[] {
w.id
w.name
w.data //This is the MyAwesomeClass object I'm trying to pass
});
}
return cursor;
}
Ceci est l'activité qui reçoit la suggestion de recherche:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Object extra = getIntent().getSerializableExtra(SearchManager.EXTRA_DATA_KEY);
//extra.getClass() returns String, when it should return MyAwesomeClass, so this next line throws a ClassCastException and causes a crash
MyAwesomeClass mac = (MyAwesomeClass)extra;
...
}