В моем приложении я пытаюсь передать сериализуемый объект через намерение другому действию.Цель не полностью создана мной, она создается и передается через поисковое предложение.
В поставщике контента для предложения поиска объект создается и помещается в столбец SUGGEST_COLUMN_INTENT_EXTRA_DATA
MatrixCursor.Однако, когда в получающем действии я вызываю getIntent().getSerializableExtra(SearchManager.EXTRA_DATA_KEY)
, возвращаемый объект имеет тип String, и я не могу привести его в исходный класс объекта.
Я попытался создать упаковку для моего объекта, которая вызывает out.writeSerializable(...)
, и использовал ее вместо этого, но произошло то же самое.
Возвращаемая строка похожа на универсальный объект toString (), то есть com.foo.yak.MyAwesomeClass@4350058
, поэтому я предполагаю, что toString () вызывается где-то, где у меня нет контроля.
Надеюсь, мне просто не хватает чего-то простого.Спасибо за помощь!
Редактировать: Часть моего кода
Это в поставщике контента, который действует как полномочия поиска:
//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;
}
Это в действиикоторый получает предложение поиска:
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;
...
}