Android Fragment中的Retrofit2如何正确实现?

时间:2017-07-05 15:58:39

标签: android android-fragments retrofit2

我正在使用Retrofit 2来消耗Api。 我有一个服务(界面)给我一个清单:

@GET("atenciones")
Call<List<Atencion>> getAtenciones(@Query("medico_id") int id, @Query("date1") String date1, @Query("date2") String date2)

我的问题是我应该在哪里提出要求?在MainActivity中包含Fragment并使用Bundle发送结果列表?或者应该在Fragment中做请求?这是一个列表而不是单个对象。哪种方法正确?

提前感谢。

修改

尝试在Fragment中调用retrofit,这是我的代码:

public class FragmentRendicion extends Fragment {

private LinearLayoutManager layoutManager;
View rootView;
APIService api;

public FragmentRendicion() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    rootView = inflater.inflate(R.layout.fragment_rendicion, container, false);
    api= ApiUtils.getAPIService();
        getAtenciones();
    return rootView;
}

private void getAtenciones() {
//using static parameters
    Call<List<Atencion>> call= api.getAtenciones(293,"2014-10-13","2014-10-13");
    call.enqueue(new Callback<List<Atencion>>() {
        @Override
        public void onResponse(Call<List<Atencion>> call, Response<List<Atencion>> response) {
            System.out.println("estamos aquiiii "+response.message());
            List<Atencion> atenciones= response.body();
            layoutManager= new LinearLayoutManager(getActivity());
            RecyclerView recycler= (RecyclerView)rootView.findViewById(R.id.rvRendicion);
            recycler.setLayoutManager(layoutManager);
            RvRendicionAdapter rvAdapter= new RvRendicionAdapter(atenciones);
            recycler.setAdapter(rvAdapter);


        }

        @Override
        public void onFailure(Call<List<Atencion>> call, Throwable t) {
            System.out.println("FALLOOOOO:  "+t.getMessage());//HERE RETUNRS NULL
        }
    });

}
}

有人可以告诉我,如果在片段中调用retrofit2是否正确?

1 个答案:

答案 0 :(得分:0)

这取决于您的代码结构,但由于您使用的是片段,我最好的猜测是您应该在Fragment中进行。

在Retrofit电话的onResponseOK中你会有这样的事情:

@Override
public void onResponseOK(Response<List<Atencion>> response) {
    ...
    //access data here
}

callback中,您可以获得列表。将列表传递给您的适配器(我想)Recycler/Listview.像这样访问列表:

List<Atencion> myList = response.body();