Android 应为BEGIN_数组,但BEGIN_对象|数组列表问题

Android 应为BEGIN_数组,但BEGIN_对象|数组列表问题,android,gson,Android,Gson,我正在使用Gson库保存和检索玩家对象的ArrayList 我的桌面() 我的一个重要部分 arraylistplayersnoguard; 回收视图myList; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity\u list\u players\u guard); SharedReferences prefs=Get

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


我的桌面() 我的一个重要部分
arraylistplayersnoguard;
回收视图myList;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u list\u players\u guard);
SharedReferences prefs=GetSharedReferences(“X”,模式\私有);
String guardJSON=prefs.getString(GUARD,null);
类型ArrayListLayers=newTypeToken(){}.getType();
Gson Gson=新的Gson();
if(guardJSON!=null){
playersNoGuard=gson.fromJson(guardJSON,arrayListPlayers);
}
//带上玩家并移除透视仪
Intent=this.getIntent();
playersNoGuard=intent.getParcelableArrayListExtra(“玩家”);
[…]//跳过了代码
}

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

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


这段代码有什么问题?

问题在于,当Gson转换响应时,您的响应是它在响应中预期的数组,但在您做出的响应中,您传递的是对象

这已经得到了回答,


描述了相反的情况。

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

您的json是一个对象,而不是数组的可能副本我不确定这是我的特定情况为什么不@Timcastelijn我怎么会知道。。这是你的数据不是我的为什么我要传递一个物体?我把它保存为一个ArrayList,我在其他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

    }