【问题标题】:How to parse Retrofit 2 response to display data? [duplicate]如何解析 Retrofit 2 响应以显示数据? [复制]
【发布时间】:2016-01-16 11:41:34
【问题描述】:

我想使用 Retrofit 2 和 Gson(或 GsonFormat,我不太确定)从 API(http://jsonplaceholder.typicode.com/posts)显示“标题”,
我创建了以下类,
Modal.java

package arpit.retrodemo;

public class Modal {
    private String title;
    public String getTitle(){
        return title;
    }
}

APIService接口,

package arpit.retrodemo;

import java.util.List;

import retrofit.Call;
import retrofit.http.GET;

public interface APIService {
    @GET("/posts")
    Call<List<Modal>> getDetails();
}


MainActivity.java

package arpit.retrodemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;


import java.util.List;

import retrofit.Call;
import retrofit.Callback;
import retrofit.GsonConverterFactory;
import retrofit.Response;
import retrofit.Retrofit;

public class MainActivity extends AppCompatActivity {

    private static final String ENDPOINT = "http://jsonplaceholder.typicode.com";
    private APIService service;
    private static List<Modal> users;

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

        Retrofit retrofit = new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(ENDPOINT)
                .build();
        service = retrofit.create(APIService.class);
        Call<List<Modal>> userList = service.getDetails();
        userList.enqueue(new Callback<List<Modal>>() {
            @Override
            public void onResponse(Response<List<Modal>> response) {
                if(response.isSuccess()){
                    Log.d("find", "response.isSuccess");
                    // to parse the API reponse(in JSON) to display, say, "title" from the API response
                }
            }

            @Override
            public void onFailure(Throwable t) {
                Log.d("findError", t.getMessage());
            }
        });

    }
}


Json 格式

[
  {
    "userId": 1,
    "id": 1,
    "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
    "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
  },
  {
    "userId": 1,
    "id": 2,
    "title": "qui est esse",
    "body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla"
  },
  {
    "userId": 1,
    "id": 3,
    "title": "ea molestias quasi exercitationem repellat qui ipsa sit aut",
    "body": "et iusto sed quo iure\nvoluptatem occaecati omnis eligendi aut ad\nvoluptatem doloribus vel accusantium quis pariatur\nmolestiae porro eius odio et labore et velit aut"
  }
]


所以我在 onResponse 方法中从 API 获得响应,但是

如何将每个标题存储在 Modal.java 类的对象中,并且“用户”列表将包含 Modal 的所有对象.java 以便我以后可以在“用户”列表上使用迭代器显示标题。

【问题讨论】:

  • 您可能会在 response.body() 中的 onResponse 方法中获取模态类列表。你能检查一下,但你得到了你的 response.body() 吗?
  • 您的 Json 中需要更正,根据上述 cmets,它不是标准的。

标签: java android rest retrofit2


【解决方案1】:

1)。首先,请在您的 Modal 类中添加标题的 setter 函数。

2)。您可以从response.body() 找到模态类的列表。例如。

   @Override
        public void onResponse(Response<List<Modal>> response) {
            if(response.isSuccess()){
                List<Modal> titlesList=response.body();
            }
        }

【讨论】:

  • 当我尝试使用 for each as for(Modal mod : titlesList){Log.d("find", mod.getTitle());} 访问titlesList 时,它给出空指针异常
  • 你调试过你的代码吗?你的 response.body() 是 null 吗?
  • 嘿,它工作正常,我在那里犯了一个可怕的愚蠢错误,感谢您的帮助,您能否也看看这个问题stackoverflow.com/questions/34832191/…,非常感谢您的帮助。
  • 很高兴它起作用了..:)
【解决方案2】:

如果其他一切都很好,你可以使用这段代码。

Type listType = new TypeToken<ArrayList<Modal>>() { // object can be String here
        }.getType();
        List<Modal> list = new Gson().fromJson(response.body().string(), listType);

【讨论】:

    猜你喜欢
    • 2018-12-17
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多