类型'String'不是'index'的'int'类型的子类型

时间:2018-11-21 16:26:34

标签: android dart flutter

在针对Android模拟器进行调试时,我的App可以成功进行身份验证,但是如果我尝试对物理设备(具有相同的OS版本)使用调试进行身份验证,则在等待一分钟以上后会出现错误消息:

  

发生异常。

     

_TypeError(类型“字符串”不是“索引”的类型“ int”的子类型)

错误消息指向以下代码:

        if (responseJson[AuthUtils.authTokenKey] != null) {
          AuthUtils.insertDetails(
              userNameController.text, passwordController.text, responseJson);
...
        } else {
...
        };

在调试控制台中,我得到以下信息:

  

I / flutter(9531):身份验证:SocketException:操作系统错误:连接已计时   出,errno = 110,地址= example.com,端口= 38975   V / InputMethodManager(9531):开始输入:   tba=android.view.inputmethod.EditorInfo@4aece4e nm:   example.com.todoapp ic = null

这是屏幕截图: enter image description here

我在这里做什么错了?

9 个答案:

答案 0 :(得分:3)

我相信这一行:

responseJson[responseJson.indexOf(AuthUtils.authTokenKey)]

您通过索引 AuthUtils.authTokenKey

引用列表 responseJson 中的项目。

并且由于 AuthUtils.authTokenKey 是字符串,因此您不能在数组索引中使用它。

因此,您首先需要获取 AuthUtils.authTokenKey 的索引,然后使用它来引用该项:

['ann', 'nne', 'nef', 'efr', 'fra', 'ran', 'ank', 'nk']

答案 1 :(得分:2)

'String'不是'index'的'int'类型的子类型直接意味着您在此处使用String代替Int :responseJson [AuthUtils.authTokenKey]将int用作索引哪里 -> AuthUtils.authTokenKey是一个String。 *

在控制台中打印您的response.body并检查您的位置 authTokenKey已存储。

* 您可以通过在响应中使用indexOf直接获取其索引,并在响应中用作获取authTokenKey的索引

答案 2 :(得分:1)

在Firebase Firestore中测试数据库时遇到此错误。

以下断言被抛出 StreamBuilder(脏,状态: _StreamBuilderBaseState>#52d4b):类型'String'不是子类型 类型为“ int”

问题是我的文档字段具有字符串类型,但是它需要一个数字。因此,将字符串从数字更改为数字就可以了。

enter image description here

答案 3 :(得分:1)

这对我有用。我当时只是在颤抖。

  http.Response S=await 
  http.get("Your link here");
  String responseBody = S.body;
  dynamic jsonObject = jsonDecode(jsonDecode(S.body));
  print(jsonObject[0]["product_id"]);
  setState(() {
    data=jsonObject[0]["product_id"];
  });

答案 4 :(得分:0)

我有一个与此非常相似的问题。这是由于对var的条件赋值导致的,该赋值导致类型在运行时发生更改。看一下NetworkUtil.authencateUser返回什么。我敢打赌这是一个未来尝试将其更改为Future>。

您的模拟器是否具有其他SHA1密钥?这可能是两种环境之间差异的原因。

答案 5 :(得分:0)

对于我来说 responseJson是动态数据类型,我要做的就是将其转换为字符串。

更改此

  

responseJson [AuthUtils.authTokenKey]

对此

positionIndicator.isVisible = true

答案 6 :(得分:0)

检查响应是否返回数组数据。

{[{authTokenKey: 'asbc'}]}

在这种情况下,您需要使用[0]元素。然后,您将获得Map,可以在其中访问带有String值的索引。

var authTokenElm = responseJson[0];
var authToken = authTokenElm[AuthUtils.authTokenKey];

答案 7 :(得分:0)

$json_encode = json_encode($query_array);
$json_encode = str_replace("[", "", $json_encode);
$json_encode = str_replace("]", "", $json_encode);
echo $json_encode;

答案 8 :(得分:0)

对于那些提出API投递请求的人,请发送地图,

final payload = {data: [Array should be sent in this format]}

当您要将Man 数组发送到API正文时。