В библиотеке Android возникают проблемы с чтением потока, который дает openRawResource - PullRequest
1 голос
/ 22 сентября 2011

Я использую библиотеку plist для загрузки файла plist: http://code.google.com/p/plist/ Я использую такой код:

//InputStream ins = getResources().openRawResource(R.raw.skillsanddrills)
    InputStream ins = getResources().openRawResource(R.xml.skillsanddrills); //file name is skillsanddrills.plist
    NSDictionary rootDict;
    try {
    rootDict = (NSDictionary)PropertyListParser.parse(ins);
    ...

Однако я получаю:

java.lang.UnsupportedOperationException: Указанные данные не являются ни двоичным списком, ни списком свойств XML.Списки свойств ASCII не поддерживаются.

Я не верю, что это ошибка библиотек, потому что я получил похожую ошибку при использовании другой библиотеки plist, а сам файл - просто план XML.Почему Android меняет мои plist-файлы?Любые идеи о том, как это исправить?

Библиотека также принимает файлы вместо потоков.Но не могу понять, как создать путь к файлу.

1 Ответ

1 голос
/ 22 сентября 2011

Это должен быть исходный код, в котором происходит сбой:

/**
 * Parses a property list from a file. It can either be in XML or binary format.
 * @param f The property list file
 * @return The root object in the property list
 * @throws Exception If an error occurred while parsing
 */
public static NSObject parse(File f) throws Exception {
    FileInputStream fis = new FileInputStream(f);
    String magicString = new String(readAll(fis, 8), 0, 8);
    fis.close();
    if (magicString.startsWith("bplist00")) {
        return BinaryPropertyListParser.parse(f);
    } else if (magicString.startsWith("<?xml")) {
        return XMLPropertyListParser.parse(f);
    } else {
        throw new UnsupportedOperationException("The given data is neither a binary nor a XML property list. ASCII property lists are not supported.");
    }
}

Может быть, вы должны поместить свой список не в xml, а в папку raw и загрузить его так:

getResources().openRawResource(R.raw.skillsanddrills)

Если это не удается, вставьте его в asset и загрузите так:

getAssets().open("filename");

Если это не удастся, тогда ваш список может быть просто неправильно отформатирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...