Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 两个不同的请求,两个不同的调用和一个回收器_Android_Retrofit2_Android Recyclerview - Fatal编程技术网

Android 两个不同的请求,两个不同的调用和一个回收器

Android 两个不同的请求,两个不同的调用和一个回收器,android,retrofit2,android-recyclerview,Android,Retrofit2,Android Recyclerview,我正在努力做到这一点 我正在使用来自同一API的两个不同请求资源,并在MainActivity中执行两个不同的调用。但是,我无法在一个RecyclerView视图上同时显示JSON的内容 MainActivity.java public class MainActivity extends AppCompatActivity { private Retrofit retrofit; private static final String TAG = "Football";

我正在努力做到这一点

我正在使用来自同一API的两个不同请求资源,并在MainActivity中执行两个不同的调用。但是,我无法在一个RecyclerView视图上同时显示JSON的内容

MainActivity.java

public class MainActivity extends AppCompatActivity {
    private Retrofit retrofit;
    private static final String TAG = "Football";
    private RecyclerView recyclerView;
    private ListaPartidosAdapter listaPartidosAdapter;

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

        recyclerView = (RecyclerView)findViewById(R.id.recyclerView);
        listaPartidosAdapter = new ListaPartidosAdapter(this);
        recyclerView.setAdapter(listaPartidosAdapter);
        recyclerView.setHasFixedSize(true);
        final LinearLayoutManager layoutManager = new LinearLayoutManager(this, VERTICAL, true);
        recyclerView.setLayoutManager(layoutManager);

        retrofit = new Retrofit.Builder()
                .baseUrl("http://api.football-data.org/v2/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        obtenerDatos();
    }

    private void obtenerDatos() {

        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        String todayDate=df.format(calendar.getTime());
        calendar.add(Calendar.DATE,3);
        String endDate = df.format(calendar.getTime());

        Log.i(TAG, "todayDate : " + todayDate);
        Log.i(TAG, "endDate : " + endDate);

        footballdataService service = retrofit.create(footballdataService.class);
        Call<PartidosRespuesta> partidosRespuestaCall = service.obtenerlistaPartidos(todayDate,endDate);
        Call<StandingsRespuesta> standingsRespuestaCall = service.obtenerStandings();

        partidosRespuestaCall.enqueue(new Callback<PartidosRespuesta>() {
            @Override
            public void onResponse(Call<PartidosRespuesta> call, Response<PartidosRespuesta> response) {
                if(response.isSuccessful()) {
                    PartidosRespuesta partidosRespuesta = response.body();
                    List<Partido> listaPartidos = partidosRespuesta.getMatches();
                    listaPartidosAdapter.adicionarListaPartidos((ArrayList<Partido>) listaPartidos);

                }
                else {
                    Log.e(TAG, "onResponse: " + response.errorBody());
                }
            }

            @Override
            public void onFailure(Call<PartidosRespuesta> call, Throwable t) {
                Log.e(TAG, "onFailure: " + t.getMessage());
            }
        });


        standingsRespuestaCall.enqueue(new Callback<StandingsRespuesta>() {
            @Override
            public void onResponse(Call<StandingsRespuesta> call, Response<StandingsRespuesta> response) {
                if(response.isSuccessful()) {
                    StandingsRespuesta standingsRespuesta = response.body();
                    List<Stand> listaStands = standingsRespuesta.getStandings();
                    listaPartidosAdapter.adicionarListaStands((ArrayList<Stand>) listaStands);
                }
            }

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

            }
        });
    }
}
public class ListaPartidosAdapter extends RecyclerView.Adapter<ListaPartidosAdapter.ViewHolder> {

    private static final String TAG = "Football_Adapter";
    private ArrayList<Partido> dataset;
    private ArrayList<Stand> dataset_stand;
    private Context context;

    public ListaPartidosAdapter(Context context) {
        this.context = context;
        this.dataset = new ArrayList<Partido>();
        this.dataset_stand = new ArrayList<Stand>();
    }

    @Override
    public ListaPartidosAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_partidos, parent, false);
        return new ViewHolder(view);
    }


    @Override
    public void onBindViewHolder(ListaPartidosAdapter.ViewHolder holder, int position) {
        Partido p = dataset.get(position);
        String status = p.getStatus();

        if (status.equals("SCHEDULED")){
            String status_ = "SCH";
            holder.status.setText(status_);
        }
        holder.utcDate.setText(p.getUtcDate());


        Partido.EquipoCasa homeTeam = p.getHomeTeam();
        String id_homeTeam = homeTeam.getId();

        holder.homeTeam.setText(homeTeam.getName());

        Partido.EquipoVisita awayTeam = p.getAwayTeam();
        holder.awayTeam.setText(awayTeam.getName());

        Stand s = dataset_stand.get(position);
        Stand.Table table = (Stand.Table) s.getTable();
        Stand.Table.Equipo team = (Stand.Table.Equipo) table.getEquipo();
        String id_equipo = team.getId();
        holder.homeTeam.setText(team.getName());


        if(id_homeTeam.equals(id_equipo)){
            Glide.with(context)
                .load(team.getCrestUrl())
                .centerCrop()
                .crossFade()
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(holder.team);
            //holder.team.setImageDrawable(team.getCrestUrl());
        }


    }

    @Override
    public int getItemCount() {
        return dataset.size()+dataset_stand.size();
    }


    public void adicionarListaPartidos(ArrayList<Partido> listaPartidos){
        dataset.addAll(listaPartidos);
        notifyDataSetChanged();
    }


    public void adicionarListaStands(ArrayList<Stand> listaStands){
        dataset_stand.addAll(listaStands);
        notifyDataSetChanged();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        private TextView status;
        private TextView utcDate;
        private TextView homeTeam;
        private TextView awayTeam;
        public ImageView team;


        public ViewHolder(View itemView) {
            super(itemView);

            status = (TextView) itemView.findViewById(R.id.status);
            utcDate = (TextView) itemView.findViewById(R.id.utcDate);
            homeTeam = (TextView) itemView.findViewById(R.id.homeTeam);
            awayTeam = (TextView) itemView.findViewById(R.id.awayTeam);
            team = (ImageView) itemView.findViewById(R.id.team);
        }
    }
}
public类MainActivity扩展了AppCompatActivity{
私人改装;
私有静态最终字符串TAG=“Football”;
私人回收站;
私有ListaPartidosAdapter ListaPartidosAdapter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView=(recyclerView)findViewById(R.id.recyclerView);
listaPartidosAdapter=新的listaPartidosAdapter(此);
setAdapter(listaPartidosAdapter);
recyclerView.setHasFixedSize(true);
最终LinearLayoutManager layoutManager=新的LinearLayoutManager(此,垂直,真);
recyclerView.setLayoutManager(layoutManager);
改装=新改装.Builder()
.baseUrl(“http://api.football-data.org/v2/")
.addConverterFactory(GsonConverterFactory.create())
.build();
obtenerDatos();
}
私有void obtenerDatos(){
日历=Calendar.getInstance();
SimpleDataFormat df=新SimpleDataFormat(“yyyy-MM-dd”);
字符串todayDate=df.format(calendar.getTime());
日历。添加(日历。日期,3);
字符串endDate=df.format(calendar.getTime());
Log.i(标记“todayDate:+todayDate”);
Log.i(标签“endDate:+endDate”);
footballdataService服务=改装.create(footballdataService.class);
调用partidosRespuestaCall=service.obtenerlistaPartidos(todayDate,endDate);
Call standingsrespuestall=service.obtenerStandings();
partidosRespuestaCall.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.issusccessful()){
PartidosRespuesta PartidosRespuesta=response.body();
List listaPartidos=partidosRespuesta.getMatches();
adicionarListaPartidos((ArrayList)listaPartidos);
}
否则{
Log.e(标记“onResponse:+response.errorBody());
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.e(标记“onFailure:+t.getMessage());
}
});
standingsRespuestaCall.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.issusccessful()){
StandingsRespuesta StandingsRespuesta=response.body();
List listaStands=standingsRespuesta.getStandings();
adicionarListaStands((ArrayList)listaStands);
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
}
});
}
}
正如我前面所说,每个请求都有一个不同的排队调用。我不知道这样做是否正确,但我认为是的,因为每个电话都有自己的服务

ListaPartidosAdapter.java

public class MainActivity extends AppCompatActivity {
    private Retrofit retrofit;
    private static final String TAG = "Football";
    private RecyclerView recyclerView;
    private ListaPartidosAdapter listaPartidosAdapter;

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

        recyclerView = (RecyclerView)findViewById(R.id.recyclerView);
        listaPartidosAdapter = new ListaPartidosAdapter(this);
        recyclerView.setAdapter(listaPartidosAdapter);
        recyclerView.setHasFixedSize(true);
        final LinearLayoutManager layoutManager = new LinearLayoutManager(this, VERTICAL, true);
        recyclerView.setLayoutManager(layoutManager);

        retrofit = new Retrofit.Builder()
                .baseUrl("http://api.football-data.org/v2/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        obtenerDatos();
    }

    private void obtenerDatos() {

        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        String todayDate=df.format(calendar.getTime());
        calendar.add(Calendar.DATE,3);
        String endDate = df.format(calendar.getTime());

        Log.i(TAG, "todayDate : " + todayDate);
        Log.i(TAG, "endDate : " + endDate);

        footballdataService service = retrofit.create(footballdataService.class);
        Call<PartidosRespuesta> partidosRespuestaCall = service.obtenerlistaPartidos(todayDate,endDate);
        Call<StandingsRespuesta> standingsRespuestaCall = service.obtenerStandings();

        partidosRespuestaCall.enqueue(new Callback<PartidosRespuesta>() {
            @Override
            public void onResponse(Call<PartidosRespuesta> call, Response<PartidosRespuesta> response) {
                if(response.isSuccessful()) {
                    PartidosRespuesta partidosRespuesta = response.body();
                    List<Partido> listaPartidos = partidosRespuesta.getMatches();
                    listaPartidosAdapter.adicionarListaPartidos((ArrayList<Partido>) listaPartidos);

                }
                else {
                    Log.e(TAG, "onResponse: " + response.errorBody());
                }
            }

            @Override
            public void onFailure(Call<PartidosRespuesta> call, Throwable t) {
                Log.e(TAG, "onFailure: " + t.getMessage());
            }
        });


        standingsRespuestaCall.enqueue(new Callback<StandingsRespuesta>() {
            @Override
            public void onResponse(Call<StandingsRespuesta> call, Response<StandingsRespuesta> response) {
                if(response.isSuccessful()) {
                    StandingsRespuesta standingsRespuesta = response.body();
                    List<Stand> listaStands = standingsRespuesta.getStandings();
                    listaPartidosAdapter.adicionarListaStands((ArrayList<Stand>) listaStands);
                }
            }

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

            }
        });
    }
}
public class ListaPartidosAdapter extends RecyclerView.Adapter<ListaPartidosAdapter.ViewHolder> {

    private static final String TAG = "Football_Adapter";
    private ArrayList<Partido> dataset;
    private ArrayList<Stand> dataset_stand;
    private Context context;

    public ListaPartidosAdapter(Context context) {
        this.context = context;
        this.dataset = new ArrayList<Partido>();
        this.dataset_stand = new ArrayList<Stand>();
    }

    @Override
    public ListaPartidosAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_partidos, parent, false);
        return new ViewHolder(view);
    }


    @Override
    public void onBindViewHolder(ListaPartidosAdapter.ViewHolder holder, int position) {
        Partido p = dataset.get(position);
        String status = p.getStatus();

        if (status.equals("SCHEDULED")){
            String status_ = "SCH";
            holder.status.setText(status_);
        }
        holder.utcDate.setText(p.getUtcDate());


        Partido.EquipoCasa homeTeam = p.getHomeTeam();
        String id_homeTeam = homeTeam.getId();

        holder.homeTeam.setText(homeTeam.getName());

        Partido.EquipoVisita awayTeam = p.getAwayTeam();
        holder.awayTeam.setText(awayTeam.getName());

        Stand s = dataset_stand.get(position);
        Stand.Table table = (Stand.Table) s.getTable();
        Stand.Table.Equipo team = (Stand.Table.Equipo) table.getEquipo();
        String id_equipo = team.getId();
        holder.homeTeam.setText(team.getName());


        if(id_homeTeam.equals(id_equipo)){
            Glide.with(context)
                .load(team.getCrestUrl())
                .centerCrop()
                .crossFade()
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(holder.team);
            //holder.team.setImageDrawable(team.getCrestUrl());
        }


    }

    @Override
    public int getItemCount() {
        return dataset.size()+dataset_stand.size();
    }


    public void adicionarListaPartidos(ArrayList<Partido> listaPartidos){
        dataset.addAll(listaPartidos);
        notifyDataSetChanged();
    }


    public void adicionarListaStands(ArrayList<Stand> listaStands){
        dataset_stand.addAll(listaStands);
        notifyDataSetChanged();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        private TextView status;
        private TextView utcDate;
        private TextView homeTeam;
        private TextView awayTeam;
        public ImageView team;


        public ViewHolder(View itemView) {
            super(itemView);

            status = (TextView) itemView.findViewById(R.id.status);
            utcDate = (TextView) itemView.findViewById(R.id.utcDate);
            homeTeam = (TextView) itemView.findViewById(R.id.homeTeam);
            awayTeam = (TextView) itemView.findViewById(R.id.awayTeam);
            team = (ImageView) itemView.findViewById(R.id.team);
        }
    }
}
公共类ListaPartidosAdapter扩展了RecyclerView.Adapter{
私有静态最终字符串TAG=“Football_Adapter”;
私有ArrayList数据集;
私有ArrayList数据集_stand;
私人语境;
公共ListaPartidosAdapter(上下文){
this.context=上下文;
this.dataset=新的ArrayList();
this.dataset_stand=new ArrayList();
}
@凌驾
public ListaPartidosAdapter.ViewHolder onCreateViewHolder(ViewGroup父级,int-viewType){
视图=LayoutFlater.from(parent.getContext()).flate(R.layout.item_partidos,parent,false);
返回新的ViewHolder(视图);
}
@凌驾
public void onBindViewHolder(ListaPartidosAdapter.ViewHolder,int位置){
Partido p=dataset.get(位置);
字符串状态=p.getStatus();
if(状态等于(“计划”)){
字符串状态=“SCH”;
holder.status.setText(status_);
}
holder.utcDate.setText(p.getUtcDate());
Partido.EquipoCasa homeTeam=p.getHomeTeam();
字符串id_homeTeam=homeTeam.getId();
holder.homeTeam.setText(homeTeam.getName());
Partido.EquipoVisita awayTeam=p.getAwayTeam();
holder.awayTeam.setText(awayTeam.getName());
Stand s=数据集\ Stand.get(位置);
Stand.Table=(Stand.Table)s.getTable();
Stand.Table.Equipo团队=(Stand.Table.Equipo)Table.getEquipo();
字符串id_equipo=team.getId();
holder.homeTeam.setText(team.getName());
如果(本垒打等于本垒打){
带(上下文)滑动
.load(team.getCrestUrl())
.centerCrop()
.crossFade()
.diskCacheStrategy(diskCacheStrategy.ALL)
.进入(持有人团队);
//holder.team.setImageDrawable(team.getCrestUrl());
}
}
@凌驾
public int getItemCount(){
返回dataset.size()+dataset_stand.size();
}
公共无效adicionarListaPartidos(ArrayList listaPartidos){
dataset.addAll(listaPartidos);
notifyDataSetChanged();
}
公共无效adicionarListaStands(ArrayList listaStands){
数据集_stand.addAll(listaStands);
notifyDataSetChanged();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
私有文本视图状态;
私有文本视图utcDate;
私人TextView homeTeam;
私有的
public void adicionarListaStands(ArrayList<Stand> listaStands){
   dataset_stand.addAll(listaStands);
   notifyDataSetChanged();    // <==== DO NOT remove this
}