Android - пример разбитого XML - PullRequest
       16

Android - пример разбитого XML

4 голосов
/ 21 августа 2011

Android SDK с момента выпуска API v. 11 содержит образец XmlAdapter, который также указан на официальном сайте .Этот образец теперь появляется как минимум в 3 папках: android-11, android-12 и android-13.И это сломано.Основной (но не единственной) проблемой является провайдер android.content.XmlDocumentProvider, которого нигде нет, включая https://android.googlesource.com
. В Adapters.java также есть проблемы компиляции:связан с этим на android-developers но ответа нет.Кому-нибудь удалось отследить этот неуловимый XmlDocumentProvider и заставить образец работать?И самое главное - уважаемая команда Android, можете ли вы починить образец или вытащить его?

Ответы [ 4 ]

2 голосов
/ 31 октября 2011

Отсутствующий XmlDocumentProvider теперь поставляется с образцом в SDK 14, и проект компилируется с SDK 8 и выше. Однако для успешного запуска необходимо изменить манифест так, чтобы он указывал на правильного поставщика:

<provider android:name="com.example.android.xmladapters.XmlDocumentProvider"
       android:authorities="xmldocument" />
1 голос
/ 19 сентября 2012

Помимо исправления AndroidManifest.xml, на что указал Джефф Гилфелт, вы также можете изменить код класса XmlCursorAdapter в Adapters.java (файл, показывающий ошибки), например:

/**
 * Implementation of a Cursor adapter defined in XML. This class is a thin wrapper
 * of a SimpleCursorAdapter. The main difference is the ability to handle CursorBinders.
 */
private static class XmlCursorAdapter extends SimpleCursorAdapter implements ManagedAdapter {
    private Context mContext;
    private String mUri;
    private final String mSelection;
    private final String[] mSelectionArgs;
    private final String mSortOrder;
    private final int[] mTo;
    private final String[] mFrom;
    private final String[] mColumns;
    private final CursorBinder[] mBinders;
    private AsyncTask<Void,Void,Cursor> mLoadTask;



    XmlCursorAdapter(Context context, int layout, String uri, String[] from, int[] to,
            String selection, String[] selectionArgs, String sortOrder,
            HashMap<String, CursorBinder> binders) {

        super(context, layout, null, from, to);
        mContext = context;
        mUri = uri;
        mFrom = from;
        mTo = to;
        mSelection = selection;
        mSelectionArgs = selectionArgs;
        mSortOrder = sortOrder;
        mColumns = new String[from.length + 1];
        // This is mandatory in CursorAdapter
        mColumns[0] = "_id";
        System.arraycopy(from, 0, mColumns, 1, from.length);

        CursorBinder basic = new StringBinder(context, new IdentityTransformation(context));
        final int count = from.length;
        mBinders = new CursorBinder[count];

        for (int i = 0; i < count; i++) {
            CursorBinder binder = binders.get(from[i]);
            if (binder == null) binder = basic;
            mBinders[i] = binder;
        }
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        final int count = mTo.length;
        final int[] to = mTo;
        final CursorBinder[] binders = mBinders;

        for (int i = 0; i < count; i++) {
            final View v = view.findViewById(to[i]);
            if (v != null) {
                binders[i].bind(v, cursor, cursor.getColumnIndex(mFrom[i]));
            }
        }
    }
    ......
    ......
    ......

Я получилответ с найденного здесь кода:

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.0.1_r1/com/example/android/xmladapters/Adapters.java?av=f

0 голосов
/ 04 января 2012

Я встретил ту же ошибку и искал вокруг, нашел, что один и тот же вопрос задавался много раз.Вот как я это исправил.

Существует XmlDocumentProvider класс Я нашел .

Я скопировал XmlDocumentProvider.java в проект XmlAdapter и исправилAndroidManifest.xml, заменив:

<provider android:name="android.content.XmlDocumentProvider"
       android:authorities="xmldocument" /> 

на:

<provider android:name="com.example.android.xmladapters.XmlDocumentProvider"
   android:authorities="xmldocument" />

Теперь я могу заставить работать RssReaderActivity.

0 голосов
/ 24 августа 2011

Я получил ответ от Ромена Гая, ну вроде. Билет, который я открыл вчера, теперь имеет тег Status: FutureRelease , который, я полагаю, означает, что они исправят его в следующем выпуске. Для дополнительной ссылки здесь ссылка на обсуждение android-developers

...