【问题标题】:Error RetroFit Begin ARray Object .IllegalStateException错误 RetroFit 开始数组对象 .IllegalStateException
【发布时间】:2018-09-17 11:11:52
【问题描述】:

我是 GSON 的新手,我遇到了错误

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

我遵循了一个教程,但似乎做对了。

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

这是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"
    }
  ]
},

这是我的代码。

Message.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 +
                '}';
    }
}

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 + '\'' +
                '}';
    }
}

Main.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 +
                '}';
    }
}

你能帮帮这个新手吗?

【问题讨论】:

  • 也分享你的Feed 模型类,"messages": [ 错误很简单`改造期望你的消息接收器是数组
  • @AbdulKawee 添加了
  • 查看答案

标签: java android gson retrofit2


【解决方案1】:

1) 你的 Feed.java 应该是这样的

class Feed {
    List<Message> messages = new ArrayList<>();

    public List<Message> getMessages() {
        return messages;
    }

    public void setMessages(List<Message> messages) {
        this.messages = messages;
    }
}

2)您根本无法访问您提到的附件

ArrayList<Attachments> attachmentsList=response.body().getMessage().getAttachments();

因为attachments 不能通过messages 直接访问,因为messages 是一个数组。 attachments 可以从messages 的对象中访问。

3) 所以你可以像这样访问attachments

List<Messages> messages = response.body().getMessages();
for (int i = 0; i < messages.size(); i++) {
    Message message = messages.get(i);
    Attachments attachment = message.getAttachments();
    /* do something with the attachment */
}

4) 尝试对 attachments 进行空检查,因为从您的 json 看来,它似乎不适用于每个对象。

【讨论】:

  • 我看到的教程,他创建对象并像那样访问它们。
  • @RicardoRodriguestablayout 消息将是答案中显示的列表。
  • @RicardoRodrigues 很高兴它有帮助。干杯!
【解决方案2】:

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

【讨论】:

  • 那是因为我没有复制整个文件。 JSON文件是正确的
【解决方案3】:

在您的 Feed 模型类中,您必须将您的 private Message messages; 更改为

private ArrayList<Message> messages;

在响应中,您将收到一系列消息,并且改造将接受确切的响应模型。

您所有的消息数据都将在 messages arrayList

【讨论】:

    【解决方案4】:

    您正在从 json 获取数组,但您正在尝试将结果存储在对象中。您必须将响应存储在对象数组中。

    【讨论】:

      猜你喜欢
      • 2021-05-03
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 2019-11-17
      • 1970-01-01
      • 1970-01-01
      • 2019-01-03
      • 1970-01-01
      相关资源
      最近更新 更多