Berke
Berke

Reputation: 760

POST fails with ReadableNativeMap cannot be cast to String error

I'm working in React Native, I use PHP for backend and when I use fetch POST request I get so strange error, and I dont know why it happens. I checked the url so it works no problem, also normal fetch() is working without POST but when I try to post it happens. When I try it in local server fetch POST works.. but in server, I get this error :

ERROR : com.facebook.react.bridge.ReadableNativeMap cannot be cast to java.lang.String

React native codes :

fetch('http://xxx/react_test1', {
  method: 'POST',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: inputName,
    email: inputEmail,
    phone: inputPhone
  }),
}).then((response) => response.json())
  .then((responseJson) => {
    Alert.alert(responseJson);
  }).catch((error) => {
  alert(error);
});

Upvotes: 4

Views: 15176

Answers (3)

Mahendren Mahisha
Mahendren Mahisha

Reputation: 1062

So with fetch() in javascript you need headers: {} but when switching over to RNFetchBlob you should put the headers directly in the {}

import RNFetchBlob from "rn-fetch-blob";


const aPath = Platform.select({ ios: DocumentDir, android: DownloadDir });
const fPath = aPath + '/' + Math.floor(date.getTime() + date.getSeconds() / 2) + '.xls';

Also if you want to add body in the request then directly add it there.

For example:-
RNFetchBlob.config({
  // response data will be saved to this path if it has access right.
  path: fPath,
}).fetch('POST', URL, {
    Accept: 'application/json',
    'Content-Type': 'application/json',
    Authorization: token,
  },
JSON.stringify(reqBody)
)
.then(res => {
console.log("response body>>>",res);
})
.catch(function (err) {
console.log(err);
});

that's all enjoy your coding...

Upvotes: 0

Kushal Desai
Kushal Desai

Reputation: 127

Alert.alert only accepts string as input.

Use alert() instead to show the popup.

Example: alert("Response: ", responseJson)

Happy Coding. :)

Upvotes: 0

elyalvarado
elyalvarado

Reputation: 1296

Alert.alert receives an string, and what you're getting from the fetch response is internally a com.facebook.react.bridge.ReadableNativeMap object (which is what the native implementation for fetch returns). You can try:

Alert.alert(JSON.stringify(responseJson))

If you were using iOS you'll get a completely different error:

Exception '-[_NSFrozenDictionaryM length]: unrecognized selector  ...

Upvotes: 7

Related Questions