Попытка вызвать метод интерфейса java.lang.String com.facebook.react.bridge.ReadableMap ... для ссылки на пустой объект - PullRequest
0 голосов
/ 10 июня 2018

Я получаю эту ошибку после загрузки изображения в хранилище Firebase.Я использую «Reaction-native»: «0.55.4», «Reaction-native-fetch-blob»: «^ 0.10.8», «Reaction-native-image-picker»: «^ 0.26.10», «firebase ":" ^ 5.0.4 ",

Это мой код для загрузки изображения.

// Prepare Blob support
const Blob = RNFetchBlob.polyfill.Blob;

const fs = RNFetchBlob.fs;
window.XMLHttpRequest = RNFetchBlob.polyfill.XMLHttpRequest;
window.Blob = Blob;

uploadImage = (uri, imageName, mime = "image/jpg") => {
    return new Promise((resolve, reject) => {
      const uploadUri =
        Platform.OS === "ios" ? uri.replace("file://", "") : uri;
      let uploadBlob = null;
      const imageRef = db
        .storage()
        .ref("images/")
        .child(imageName);

  fs.readFile(uploadUri, "base64")
    .then(data => {
      return Blob.build(data, { type: `${mime};BASE64` });
    })
    .then(blob => {
      uploadBlob = blob;
      alert("blob is " + JSON.stringify(blob));
      return imageRef.put(blob, { contentType: mime });
    })
    .then(() => {
      uploadBlob.close();
      return imageRef.getDownloadURL();
    })
    .then(url => {
      resolve(url);
    })
    .catch(error => {
      reject(error);
    });
});};

Попытка вызвать метод интерфейса 'java.lang.String com.facebook.react.bridge.ReadableMap.getString (java.lang.String) 'для пустой ссылки на объект readAsText FileReaderModule.java:43790 dispatchMessage Handler.java:99 dispatchMessage MessageQueueThreadHandler.java:29 loop Looper.java:164 run MessageQueueThreadImpl.java:192 run Thread.java:764

1 Ответ

0 голосов
/ 04 октября 2018

Я столкнулся с той же ошибкой.Решение состоит в том, чтобы выполнить 'Fetch replace', как объясняется в официальной документации:

Поскольку мы не реализуем полифилл FileReader, в некоторых случаях вы можете столкнуться с этой ошибкой.

ЕслиВы столкнулись с этой проблемой с полифилом Blob в режиме отладки, попробуйте заменить window.fetch с заменой извлечения, чтобы исправить это.

И:

Если у вас уже есть кодкоторый использует whatwg-fetch, теперь вам не нужно изменять существующий код после 0.9.0, просто используйте замену fetch.Различие между Официальной выборкой и заменой выборки заключается в том, что официальная выборка использует библиотеку WHATWG-fetch js, которая обертывает полифилл XMLHttpRequest, а наша реализация просто оборачивает RNFetchBlob.fetch.

По сути, у вас просто естьчтобы добавить это в свой код, чуть ниже строки window.Blob = Blob;:

const Fetch = RNFetchBlob.polyfill.Fetch
// replace built-in fetch
window.fetch = new Fetch({
    // enable this option so that the response data conversion handled automatically
    auto : true,
    // when receiving response data, the module will match its Content-Type header
    // with strings in this array. If it contains any one of string in this array, 
    // the response body will be considered as binary data and the data will be stored
    // in file system instead of in memory.
    // By default, it only store response data to file system when Content-Type 
    // contains string `application/octet`.
    binaryContentTypes : [
        'image/',
        'video/',
        'audio/',
        'foo/',
    ]
}).build()

Документация: https://github.com/wkh237/react-native-fetch-blob/wiki/Trouble-Shooting#failed-to-execute-readastext-on-filereader

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