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

如何获取对象GSON/Retrofit2中的字符串

麻宾白
2023-03-14

我正在对这个Google Books API URL做出响应

我有一个改装要求:'

public interface BookApiService {

    @GET("/books/v1/volumes")
    Call<Books> getBooks(@Query("q") String query);
}
public class Books {

    @SerializedName("items")
    @Expose
    private List<Book> items;

    public List<Book> getItems() {
        return items;
    }
}

和book.java

public class Book {

    @SerializedName("title")
    @Expose
    private String mTitle;
    public String getTitle() {
        return mTitle;
    }
}

请求工作正确,我的意思是连接没有错误,并且改型返回的是响应,而不是失败。但我的字符串“title”为空。我怎么才能得到这个。请通过上面的链接检查JSON响应。

更新:

改装呼叫:

public class BookService{

    private static final String BASE_URL = "https://www.googleapis.com/";
    private BookApiService mApiService;
    private BookCallback mListener;

    public BookService(BookCallback listener){
        Retrofit retrofit = new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(BASE_URL)
                .build();

        mApiService = retrofit.create(BookApiService.class);

        mListener = listener;
    }



    public void getBooks(String query){
        Call<Books> call = mApiService.getBooks(query);
        call.enqueue(new Callback<Books>() {
            @Override
            public void onResponse(Call<Books> call, Response<Books> response) {
                mListener.notifyDataReceived(response.body());
            }

            @Override
            public void onFailure(Call<Books> call, Throwable t) {

                mListener.notifyErrorReceived(t);
            }
        });
    }

    public interface BookCallback{
        void notifyDataReceived(Books books);
        void notifyErrorReceived(Throwable error);
    }

BookCallback侦听器是我的主要活动:当我检查日志时,有

“成功”“标题%1为空”

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mRecyclerView = findViewById(R.id.recycler_view);
    mRecyclerView.addItemDecoration(new DividerItemDecoration(mRecyclerView.getContext(), DividerItemDecoration.VERTICAL));
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    new BookService(this).getBooks("android");

}

@Override
public void notifyDataReceived(Books books) {
    if(books.getItems() != null) {
        List<Book> items = books.getItems();
        Log.d(TAG, "Success");
        Log.d(TAG, "TITLE 1" + items.get(0).getTitle());
        setupAdapter(items);
    }
}

共有1个答案

濮阳旭东
2023-03-14

您可以在这里的浏览器中直接请求JSON。仔细查看此数据,您将看到items[0]没有属性title。相反,有一个属性volumeinfo包含title。您的翻新实体类需要正确导航到该属性,以便获取所需的数据。

 类似资料:
  • 我最近才开始使用Registfit+Gson,尽管我四处寻找解决问题的答案,并尝试了几种解决方案,但似乎没有任何效果,反而导致: 我发出请求的片段代码... 以防万一有人感兴趣... 我理解错误消息,我只是想弄清楚如何让Gson期望JSONArray。我肯定我的错误是显而易见的,但我没有看到或理解它。提前感谢您的帮助!

  • 我正在做一个项目,在那里用户可以写其他用户的邮件。邮件类当前如下所示: 现在,问题是,我需要将所有邮件保存到. yml用户数据文件中。对我来说,最简单的方法是首先将每封邮件转换为字符串,然后将所有邮件保存到

  • 问题内容: 我得到的输出为 控制器中的日期Mon Dec 31 IST 2012 请提出一种以格式输出日期的方法。需要以日期格式而不是字符串形式输出,以便将输出存储在mysql db的字段中 问题答案: 声明后 您有一个对象, 可以将其按原样存储在mysql DB中 (列类型:datetime)。 但是,在打印时,它默认为实现。我认为您希望获得类似Date @的输出,但是toString以用户可读

  • 如果我尝试实现一个自定义转换器(我在网上找到了一些例子),它会抱怨我没有实现抽象方法convert(F),而这些例子都没有实现。 谢了。

  • 问题内容: 我从字符串定义一个新的gson对象: 此处的字符串示例:http : //api.soundrop.fm/spaces/XJTt3mXTOZpvgmOc 然后尝试返回一个值: 最后用: 但是我得到一个错误: 完整班:主班:http : //pastebin.com/v4LrZm6k 无线电班:http : //pastebin.com/2BWwb6eD 问题答案: 这是Java。字段根