【问题标题】:API Response returns Mappable Object in iOS but Json on AndroidAPI 响应在 iOS 中返回可映射对象,但在 Android 中返回 Json
【发布时间】:2021-05-15 10:39:25
【问题描述】:

我是移动开发和 React-Native 的新手,这对你们中的一些人来说可能是一件非常平凡的事情,但我正在进行 Api 调用,然后映射结果以创建相同的组件,但使用不同的数据。

这在 Iphone 上运行良好,但在 Android 上却不行。

req 的响应是两个设备的对象,但在 Android 上,它似乎是一个 json 对象,我根本无法映射或在 Flatlist 上使用。

我尝试过 JSON.parse 将 json 对象转换为 js 对象,但它根本不喜欢它。它抛出了一个意外的令牌错误。

我首先为 Android 对象附加了一个日志,并为 iPhone 附加了相同的对象(已经可映射和一个 JS 对象)。

谁能告诉我为什么会这样?非常感谢!

enter image description here

___________________ 更改为获取 _______________________ 后

嘿,我从 Axios 更改为 fetch,现在我收到一个未处理的承诺警告说“未处理的承诺拒绝:SyntaxError: JSON Parse error: Unrecognized token '''。

不要以为我在这里做错了什么......

【问题讨论】:

  • 你在使用axios吗? ,,, 这个unexpected token 错误在模拟器和真实设备上触发?
  • 是的,我正在使用 axios,它在带有 Expo Metro Server 的真实设备上。
  • 如果我尝试在 Android 上映射 Json 响应,我会得到“错误未定义不是 React Native 对象”,但在 Iphone 上它会正常工作
  • 如果您可以在您的设备上打开 调试器 并查看您的响应 obj ... 如果它被截断 ... 那么fetch 是您的最佳选择...

标签: json reactjs react-native api mobile


【解决方案1】:

嗯...由于您的真实设备上的内存问题,您的响应对象被截断...很可能您的响应对象有点大...

这就是axios 获取响应数据的方式...通过块,您只需获得响应的一部分...

我之前遇到过这个问题……解决方法是切换到fetch

编辑

try {
    const rawResponse = await fetch(...);
    const text = await rawResponse.text();
    console.log(text);
    
    const parsedRes = JSON.parse(text);
    console.log('parsedRes', parsedRes);
  } catch(error) {
    console.log('fetch error', error);
  }

【讨论】:

  • 嘿@Hend,我不确定这是否成功!我在上一篇文章中添加了一些图片,看看你能不能想到什么!
  • 并且您正在使用相同的 response-obj 进行测试(在 android 和 iOS 中)...我的意思是具有相同参数的相同端点? ...并且您在使用邮递员进行测试时得到有效的响应吗?
  • 是的,在邮递员中获得有效响应,我就可以在 iOS 上使用相同的数据呈现平面列表组件。 Android设备是唯一让我很难过的设备。现在使用 fetch,我得到 '[native code]:null in parse'
  • fetch 有效,现在有一个 json 对象,但我无法将其转换为常规 js 对象来映射它。如果我尝试做 json.parse(res) 我得到' JSON Parse error: Unrecognized token '''
  • 听起来服务器返回的数据无效-json ...请检查编辑,看看它是否有效...
猜你喜欢
  • 1970-01-01
  • 2019-12-12
  • 2017-01-01
  • 2016-12-07
  • 2018-05-30
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多