首页 > 解决方案 > 错误 RetroFit 开始数组对象 .IllegalStateException

问题描述

我是新手,GSON我收到了错误

Wrongjava.lang.IllegalStateException:预期BEGIN_OBJECT但在第 2 行第 14 列路径 $.messages 处为 BEGIN_ARRAY。

我遵循了一个教程,但似乎得到了正确的结果。

如果您需要任何其他帮助,请告诉我。

这是JSON文件的一小部分。

{
"messages": [
{
  "id": 0,
  "userId": 3,
  "content": "iusto eius quod necessitatibus culpa ea, odit magnam ut saepe sed non qui\ntempora atque nihil\naccusamus illum doloribus illo dolor\neligendi repudiandae odit magni similique sed cum maiores"
},
{
  "id": 1,
  "userId": 7,
  "content": "beatae enim quia vel"
},
{
  "id": 2,
  "userId": 10,
  "content": "at nam consequatur ea labore ea harum",
  "attachments": [
    {
      "id": "3577cf23-56db-4ce8-92a0-0c1abc5f9402",
      "title": "accusamus beatae ad facilis cum similique qui sunt",
      "url": "http://placehold.it/600/92c952",
      "thumbnailUrl": "http://placehold.it/150/92c952"
    },
    {
      "id": "660bac80-7473-48bc-99ba-a7aed36a743a",
      "title": "reprehenderit est deserunt velit ipsam",
      "url": "http://placehold.it/600/771796",
      "thumbnailUrl": "http://placehold.it/150/771796"
    },
    {
      "id": "3fba42bc-33e8-4451-8433-2c48ec303e30",
      "title": "officia porro iure quia iusto qui ipsa ut modi",
      "url": "http://placehold.it/600/24f355",
      "thumbnailUrl": "http://placehold.it/150/24f355"
    }
  ]
},

这是我的代码。

消息.java

package com.example.rjrod.legendchat.Model;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

import java.util.ArrayList;

public class Message {

    @SerializedName("id")
    @Expose
    private int id;
    @SerializedName("userdId")
    @Expose
    private int userId;
    @SerializedName("content")
    @Expose
    private String content;
    @SerializedName("attachments")
    @Expose
    private ArrayList<Attachments> attachments;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public ArrayList<Attachments> getAttachments() {
        return attachments;
    }

    public void setAttachments(ArrayList<Attachments> attachments) {
        this.attachments = attachments;
    }

    @Override
    public String toString() {
        return "Message{" +
                "id='" + id + '\'' +
                ", userId='" + userId + '\'' +
                ", content='" + content + '\'' +
                ", attachments=" + attachments +
                '}';
    }
}

附件.java

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Attachments {

    @SerializedName("id")
    @Expose
    private String id;

    @SerializedName("title")
    @Expose
    private String title;

    @SerializedName("url")
    @Expose
    private String url;

    @SerializedName("thumbnailUrl")
    @Expose
    private String thumbnailUrl;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getThumbnailUrl() {
        return thumbnailUrl;
    }

    public void setThumbnailUrl(String thumbnailUrl) {
        this.thumbnailUrl = thumbnailUrl;
    }

    @Override
    public String toString() {
        return "Attachments{" +
                "id='" + id + '\'' +
                ", title='" + title + '\'' +
                ", url='" + url + '\'' +
                ", thumbnailUrl='" + thumbnailUrl + '\'' +
                '}';
    }
}

主.java

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    private static final String BASE_URL = "https://private-96848-7egend.apiary-mock.com/";

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

        Button btGetData = findViewById(R.id.btGetData);

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();


        LegendAPI legendAPI = retrofit.create(LegendAPI.class);
        Call<Feed> call = legendAPI.getStuff();


        call.enqueue(new Callback<Feed>() {
            @Override
            public void onResponse(Call<Feed> call, Response<Feed> response) {
                Log.d(TAG, "onResponse: Server Response: " + response.toString());
                Log.d(TAG, "onResponse: Received information " + response.body().toString());

                ArrayList<Attachments> attachmentsList=response.body().getMessage().getAttachments();
                for (int i=0;i< attachmentsList.size();i++){
                    Log.d(TAG, "onResponse: \n" + "id:"+ attachmentsList.get(i).getId()+ "\n" +
                            "title"+ attachmentsList.get(i).getTitle()+ "\n" +
                            "url"+ attachmentsList.get(i).getUrl()+ "\n" +
                            "thumbnailUrl"+ attachmentsList.get(i).getThumbnailUrl()+ "\n" + "--------------------------------------\n\n");
                }
            }

            @Override
            public void onFailure(Call<Feed> call, Throwable t) {
                Log.e(TAG, "on Failure: Something went Wrong" + t.getMessage());
                Toast.makeText(MainActivity.this, "Something went Wrong", Toast.LENGTH_SHORT).show();
            }
        });

    }
}

喂养

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Feed {

    @SerializedName("messages")
    @Expose
    private Message messages;

    @SerializedName("users")
    @Expose
    private Users user;

    public Message getMessage() {
        return messages;
    }

    public void setMessage(Message messages) {
        this.messages = messages;
    }

    public Users getUser() {
        return user;
    }

    public void setUser(Users user) {
        this.user = user;
    }

    @Override
    public String toString() {
        return "Feed{" +
                "messages=" + messages +
                ", user=" + user +
                '}';
    }
}

你能帮助这个新手吗?

标签: javaandroidgsonretrofit2

解决方案


在您的 json 对象中,从最后一行删除“,”并添加 ]}。由于 json 格式不正确,您会收到此错误。进行更改并检查“在线 json 编辑器”


推荐阅读