JSON value of type NSnull cannot be converted to NSString?

1,270 views
Skip to first unread message

板垣庄治xt

unread,
Nov 26, 2016, 12:13:39 AM11/26/16
to Firebase Google Group
Hello Firebase,

I have strange error.


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 CLASS

// 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);


Simulator Screen Shot 2016.11.26 12.02.35.png

板垣庄治xt

unread,
Nov 26, 2016, 11:25:07 AM11/26/16
to Firebase Google Group

Hello,

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

<Image
source={{uri: 'this.state.user.photoURL'}} <<single quotation was added!!!

This fix is OK both ios and Android.

I did not expect like this kind of error.

But, Why without single quotation, ios become crash and Android is no problem.

Thanx Shoji 


2016年11月26日土曜日 14時13分39秒 UTC+9 板垣庄治xt:
Reply all
Reply to author
Forward
0 new messages