当前位置: 首页 > 知识库问答 >
问题:

预期BEGIN_ARRAY但BEGIN_OBJECT|ArrayList问题

朱明知
2023-03-14

我正在使用Gson库保存和检索玩家对象的ArrayList。

@Override
protected void onStop() {
    super.onStop();
    SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    Gson gson = new Gson();

    String guardJSON = gson.toJson(playersNoGuard);
    editor.putString(GUARD, guardJSON);

    editor.putString("lastActivity", getClass().getName());
    editor.apply();
}
ArrayList<Player> playersNoGuard;
RecyclerView myList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list_players_guard);

    SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
    String guardJSON = prefs.getString(GUARD, null);
    Type arrayListPlayers = new TypeToken<ArrayList<Player>>(){}.getType();
    Gson gson = new Gson();

    if(guardJSON != null) {
        playersNoGuard = gson.fromJson(guardJSON, arrayListPlayers);
    }

    // Get the players and remove the Clairvoyant
    Intent intent = this.getIntent();
    playersNoGuard = intent.getParcelableArrayListExtra("PLAYERS");

    [...] // Code skipped

    }

但当运行此活动时,我会得到以下错误日志:

原因:java。lang.IllegalStateException:应为BEGIN_数组,但在第1行第2列路径处为BEGIN_对象$

这段代码怎么了?

共有2个答案

孔鸿哲
2023-03-14

问题是你的响应,而Gson转换一个响应,它期望数组的响应,但在你的响应,你让你传递对象。

这已经在这里和这里得到了回答

这里描述的是相反的情况。

强金鑫
2023-03-14

您可能会在其他地方写入相同的首选项。确保您的密钥(GUARD)在整个应用程序中是唯一的。

 类似资料:
  • 我正在通过改型和RXAndroid与来自android的REST API进行交互,我遇到了一个问题。 当我向我的“api/users/{id}/{id}/classes”发送GET请求时,我的api会以用户类列表作出响应,如下所示: 我的界面如下所示: 我从片段中这样称呼它: 我的类对象以及getter和setter如下所示: gson不应该看到“类”:[]数组并从中解析对象吗?我做错了什么

  • 问题内容: 我在列表中仅收到一个项目时收到此错误。我在服务器端REST Web服务中使用Jersey,当List返回一个元素并且当我得到它时,我仅收到错误,但是当它包含多个元素时,它可以正常工作,这就是我的工作方式它: 为什么Jersey不发送包含一个项目的列表?这是球衣的虫子吗?有没有办法使它始终序列化为数组? 当Web服务返回0元素时,这是我的JSON数据: 当Web服务返回1元素时,这是我的

  • 我试图使用gson解析下面的json字符串,并且我得到了这个异常。 异常很明显,它期待一个对象(可能是Datapoint),但它遇到了一个数组。我确信是我的模型类导致了这个问题,但是我不明白我的模型类应该是什么样子才能解析json而不会失败。

  • 我的Retrofit2调用出现以下异常: 学分类别:

  • 我每次都会收到这个错误:预期的begin_数组,但它是begin_对象。我不知道我是否需要添加反序列化程序或warrper类来进行改造,但我不知道如何以简单的方式来满足我所有项目的api json响应,下面是我的改造代码: - 我的Json: 我的源代码

  • 我做了一个功能:输入身份证号码,点击提交按钮,然后获得身份证的基本信息。 我使用的模型是: 我使用的改装界面: 当我输入正确的身份证号码时,一切正常。返回的结果是: 一切运作良好。 然而,当我输入不正确的身份证号码时,不好的事情发生了: 返回的结果是: 我怎样才能修复这些漏洞?