Значение JSON '<null>' типа NSNull не может быть преобразовано в NSString - PullRequest
0 голосов
/ 30 ноября 2018

Иногда я получаю следующее сообщение об ошибке при перезагрузке приложения React Native в iOS Simulator.

enter image description here

Иногда это не происходит привсе, но иногда несколько раз в течение дня.

Я использую клиент SignalR в своем приложении, а также Firebase Messaging.

Я пытался поставить try catch catch блоки ко всему моему приложению, включая то, где я использую AsyncStorage, но это все еще происходит.

Очень расстраивает.

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

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

<Image source={{uri: null}} style={styles.myImageStyle}/>

все было в порядке с Android, но в IOS я столкнулся с этой ошибкой.поэтому я изменил свой код на следующий, и теперь он работает нормально.

const imageUri = myImageUri!=null ? myImageUri : ""

<Image source={imageUri.length!=0?{uri: imageuri}: null} style={styles.myImageStyle}/>
0 голосов
/ 18 марта 2019

Не знаю, получил ли ОП решение, но я боролся с этой ошибкой и смог найти решение.Ошибка возникла из AsyncStorage.Чтобы решить эту проблему, я использовал условный оператор и установил значение по умолчанию Null

  componentDidMount() {

  AsyncStorage.getItem('Key_0').then((value) => 

this.setState({getValue: value}))
}...
...var avatar 
if(this.state.getValue == null){
avatar = require('path/to/palceholder/asset);
}else if(this.state.getValue ! = null){
avatar={uri: this.state.getValue};
} 

<Image source={avatar}/> //the image source was the root cause of the error since Asyncstorage was passing null value

. Надеюсь, это поможет любому, кто ищет решение в будущем.

0 голосов
/ 30 ноября 2018

Я столкнулся с этим при использовании AsyncStorage.Он может хранить только строки, поэтому сохранение чего-либо еще не будет работать, например, объектов и т. Д. Ниже описано, как я устанавливаю и получаю массив заблокированных пользователей.

Когда вы устанавливаете свой элемент, его зашифруйте:

AsyncStorage.setItem('blocked_users', JSON.stringify(array));

Затем, когда вы читаете его из асинхронного хранилища, используйте обещание и json анализирует данные:

AsyncStorage.getItem("blocked_users")
        .then((value) => {
             if(value){
               blocksArray = JSON.parse(value);
               this.setState({ blocked_users: blocksArray});
             };
        });
...