Skip to content

JSON value of type NSnull cannot be converted to NSString? #11140

Closed
@itagakixt

Description

@itagakixt

Hello,

I have a strange error.

My APL use react-native and Firebase.

react-native run-android works fine without error.
but react-native run-ios failed with JSON value of type NSnull cannot be converted to NSString.

source code is as follows.(main and signup class to authentication work on firebase)

I think Firebase Class has different ACT on ios and Android to convert JSON to text.

Any suggestion appreciated.
Shoji

main
// Initialize the firebase app here and pass it to other components as needed. Only initialize on startup.

const firebaseApp = firebase.initializeApp(firebaseConfig);
var GiftedMessenger = require('react-native-gifted-messenger');
let styles = {}

class Pricing extends Component {
constructor(props){
super(props);
this.state = {
page: null
};
/* this.itemsRef = this.getRef().child('items'); */
}
componentWillMount(){
// We must asynchronously get the auth state, if we use currentUser here, it'll be null
const unsubscribe = firebaseApp.auth().onAuthStateChanged((user) => {
// If the user is logged in take them to the accounts screen
if (user != null) {
this.setState({page: Account});
console.log('(user != null)')
return;
}
// otherwise have them login
console.log('(user != Login)')
this.setState({page: Login});
// unsubscribe this observer
unsubscribe();
});
}

render() {
if (this.state.page) {
return (
// Take the user to whatever page we set the state to.
// We will use a transition where the new page will slide in from the right.
<Navigator
initialRoute={{component: this.state.page}}
configureScene={() => {
return Navigator.SceneConfigs.FloatFromRight;
}}
renderScene={(route, navigator) => {
if(route.component){
// Pass the navigator the the page so it can navigate as well.
// Pass firebaseApp so it can make calls to firebase.
return React.createElement(route.component, { navigator, firebaseApp});
}
}} />
);
} else {
return (
// Our default loading view while waiting to hear back from firebase






);
}
}
}

styles = StyleSheet.create({
container: {
margin: 15
},
headingContainer: {
marginTop: 60,
justifyContent: 'center',
alignItems: 'center',
padding: 40,
backgroundColor: colors.grey2
},
heading: {
color: 'white',
marginTop: 10,
fontSize: 22
}
})

export default Pricing

Signup CLASS

export default class Signup extends Component {
constructor(props) {
super(props);
this.state = {
// used to display a progress indicator if waiting for a network response.
loading: false,
// entered credentials
email: '',
password: ''
}
}

// A method to passs the username and password to firebase and make a new user account
signup() {
this.setState({
// When waiting for the firebase server show the loading indicator.
loading: true
});

// Make a call to firebase to create a new user.
this.props.firebaseApp.auth().createUserWithEmailAndPassword(
  this.state.email,
  this.state.password).then(() => {
    // then and catch are methods that we call on the Promise returned from
    // createUserWithEmailAndPassword
    alert('Your account was created!');
    this.setState({
      // Clear out the fields when the user logs in and hide the progress indicator.
      email: '',
      password: '',
      loading: false
    });
    this.props.navigator.push({
      component: Login
    });
}).catch((error) => {
  // Leave the fields filled when an error occurs and hide the progress indicator.
  this.setState({
    loading: false
  });
  alert("Account creation failed: " + error.message );
});

}

render() {
// The content of the screen should be inputs for a username, password and submit button.
// If we are loading then we display an ActivityIndicator.
const content = this.state.loading ? :

<TextInput
style={styles.textInput}
onChangeText={(text) => this.setState({email: text})}
value={this.state.email}
placeholder={"Email Address"} />
<TextInput
style={styles.textInput}
onChangeText={(text) => this.setState({password: text})}
value={this.state.password}
secureTextEntry={true}
placeholder={"Password"} />

登録


ログインに移行

;

// A simple UI with a toolbar, and content below it.
return (
	<View style={styles.container}>
		<GiftedMessenger
      style={styles.toolbar}
      title="Signup" />
    <View style={styles.body}>
      {content}
    </View>
  </View>
	)

}
// Go to the login page
goToLogin(){
this.props.navigator.push({
component: Login
});
}
}

AppRegistry.registerComponent('Signup', () => Signup);

Activity

itagakixt

itagakixt commented on Nov 26, 2016

@itagakixt
Author

Hello,

I deeply debuged in this BUG. At last I found it as follows.

<Image
source={{uri: 'this.state.user.photoURL'}} <<
I did not expect like this kind of error.

Thanks Shoji

itagakixt

itagakixt commented on Nov 26, 2016

@itagakixt
Author

Why ios and Android do different action without single quotation?

with single quotation both do same action. Why?

Larney11

Larney11 commented on Apr 14, 2017

@Larney11

@itagakixt I have the same issue. Could you tell me how you solved the issue? Thanks

digitaldavenyc

digitaldavenyc commented on May 12, 2017

@digitaldavenyc

@itagakixt +1 to @Larney11 I would like to know "how" you debugged this. This error is extremely ominous....

nico1510

nico1510 commented on May 20, 2017

@nico1510

@digitaldavenyc if you are displaying an image like this

<Image source={{uri: user.photoURL}} />

then you have to make sure that user.photoURL can't be null otherwise this error will show on iOS. At least that was what caused it for me.

locked as resolved and limited conversation to collaborators on May 24, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @digitaldavenyc@nico1510@itagakixt@Larney11@react-native-bot

        Issue actions

          JSON value of type NSnull cannot be converted to NSString? · Issue #11140 · facebook/react-native