Java Android Spinner上的对象属性(RESTAPI)

Java Android Spinner上的对象属性(RESTAPI),java,android,json,api,Java,Android,Json,Api,我暴露了我的问题。我已经创建了一个RESTAPI,现在我正在Android应用程序中使用它。这个有问题的应用程序试图给学生提供帮助(这是我在课堂上做的一个课堂项目) 在我的应用程序中,当选择一个科目和注册该科目的学生时,您必须选择缺课的开始时间。我这样做的方式允许我选择一个预定义的时间,我希望获取作为对象属性的开始时间,并将它们放入一个带有预定义android适配器(android.R.layout.simple\u spinner\u item或android.R.layout.simple\

我暴露了我的问题。我已经创建了一个RESTAPI,现在我正在Android应用程序中使用它。这个有问题的应用程序试图给学生提供帮助(这是我在课堂上做的一个课堂项目)

在我的应用程序中,当选择一个科目和注册该科目的学生时,您必须选择缺课的开始时间。我这样做的方式允许我选择一个预定义的时间,我希望获取作为对象属性的开始时间,并将它们放入一个带有预定义android适配器(android.R.layout.simple\u spinner\u item或android.R.layout.simple\u spinner\u dropdown\u item)的微调器中

我有一个类AsynkTask,它负责从API获取“schedule”的对象,在这些对象中有我想在微调器中显示的String类型的“Start”属性

问题是,有问题的用户教师只需在微调器中选择一个预定义的开始时间,然后按缺少的按钮添加故障。因此,在选择微调器上的特定时间时,微调器应将与所讨论的“开始”相关的“ID”属性存储在按钮操作旁边要发送的变量中。(创建故障可以正常工作,但我仅使用固定ID进行了尝试)

这是我的密码

活动

public class FaltasActivity extends AppCompatActivity implements OnFaltasReturn, OnAlumnoReturn, OnHorarioReturn {

private TextView nombre, apellidos, correo, titleFault;

private Toolbar toolbar;

private RecyclerView mRecyclerView;
private RecyclerView.LayoutManager mLayoutManager;

private ArrayList<Falta> listaFaltas;
private ArrayList<Horario> listaHorario;
private List<String> list;
private FaltasAdapter adapter;
private ArrayAdapter<String> spinnerAdapter;

private Integer idModulo, idAlumno, idHorario;
private Button falta;
private Spinner spinner;

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

    toolbar = findViewById(R.id.toolbar_faltas);
    titleFault = findViewById(R.id.toolbar_title_fault);
    titleFault.setText("Faltas");
    setSupportActionBar(toolbar);


    // SPINNER I think the spinner is well implemented ... but I can not add the objects to the lists correctly.
    spinner = findViewById(R.id.spinner);

    listaHorario = new ArrayList<>();
    list = new ArrayList<>();

    HorarioATask horarioATask = new HorarioATask(this, this);
    horarioATask.execute();

    for (int i = 0; i < listaHorario.size(); i++) {
        list.add(listaHorario.get(i).getInicio());
    }

    spinnerAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, list);
    spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    spinner.setAdapter(spinnerAdapter);

    //Finish SPINNER code

    idModulo = getIntent().getExtras().getInt("ID_MODULO");
    idAlumno = getIntent().getExtras().getInt("ID_ALUMNO");
    idHorario = 1;  //This is the variable to be replaced when a start is selected.

    nombre = findViewById(R.id.item_tittle);
    apellidos = findViewById(R.id.second_item);
    correo = findViewById(R.id.third_item);

    mRecyclerView = findViewById(R.id.rvf);

    AlumnoATask alumnoATask = new AlumnoATask(this, this, idAlumno);
    alumnoATask.execute();

    listaHorario = new ArrayList<>();

    falta = findViewById(R.id.action_button_1);
    falta.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AsyncTask.execute(new Runnable() {
                @Override
                public void run() {
                    Gson gson = new Gson();
                    final ApiConnector apiConnector = new ApiConnector();
                    final String URI_POST = "faltas";
                    String token;

                    String uri = URI_POST;
                    String method = "POST";
                    String json;

                    Alumno alumno = new Alumno(idAlumno);
                    Modulo modulo = new Modulo(idModulo);
                    Horario horario = new Horario(idHorario);

                    Falta falta = new Falta(alumno, horario, modulo);

                    json = gson.toJson(falta, Falta.class);

                    SharedPreferences prefs = getSharedPreferences("userObject", Context.MODE_PRIVATE);
                    token = prefs.getString("token", "");

                    apiConnector.consult(uri, method, json, token);

                }
            });
        }
    });

    listaFaltas = new ArrayList<>();

    mLayoutManager = new LinearLayoutManager(this);
    mRecyclerView.setHasFixedSize(true);
    adapter = new FaltasAdapter(this, listaFaltas);
    mRecyclerView.setAdapter(adapter);
    mRecyclerView.setLayoutManager(mLayoutManager);

    FaltaATask faltaATask = new FaltaATask(this, this, idAlumno, idModulo);
    faltaATask.execute();

}

@Override
public void onFaltasConsultados(ArrayList<Falta> listaFaltas) {
    this.listaFaltas.clear();
    this.listaFaltas.addAll(listaFaltas);
    this.adapter.notifyDataSetChanged();
}

@Override
public void onFaltasError() {
    Toast.makeText(this, "Error en el listado de faltas", Toast.LENGTH_SHORT).show();
}

@Override
public void onAlumnosConsultados(Alumno alumno) {
    this.nombre.setText(alumno.getNombre());
    this.apellidos.setText(alumno.getApellidos());
    this.correo.setText(alumno.getCorreo());
}

@Override
public void onAlumnosError() {
    Toast.makeText(this, "Error en los datos del alumno", Toast.LENGTH_SHORT).show();
}

//In theory this fills the lists (Interface)
@Override
public void onHorarioConsultados(ArrayList<Horario> listaHorario) {
    this.listaHorario.clear();
    this.listaHorario.addAll(listaHorario);
    this.adapter.notifyDataSetChanged();
}

@Override
public void onHorarioError() {
    Toast.makeText(this, "Error con los horarios", Toast.LENGTH_SHORT).show();
}
}

HorarioATask(AsynkTask)

公共类HorarioATask扩展异步任务{
私人语境;
私家侦探;
公共HorarioATask(OnHorarioReturn mListener,Context){
this.mListener=mListener;
this.context=上下文;
}
@凌驾
受保护的ArrayList doInBackground(无效…无效){
ArrayList listaHorarios=新的ArrayList();
最终字符串URI_GET=“horarios”;
Gson Gson=新的Gson();
字符串标记;
字符串uri;
字符串方法;
字符串json=null;
最终ApiConnector ApiConnector=新ApiConnector();
SharedReferences prefs=context.getSharedReferences(“userObject”,context.MODE\u PRIVATE);
token=prefs.getString(“token”,”);
uri=uri\u GET;
方法=“获取”;
String response=apiConnector.consult(uri、方法、json、令牌);
类型tT=新类型令牌

activity.xml

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="@bool/fitsSystemWindows"
android:orientation="vertical"
tools:context=".FaltasActivity">

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar_faltas"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimary"
    android:elevation="4dp"
    android:theme="@style/ToolbarTheme"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

    <TextView
        android:id="@+id/toolbar_title_fault"
        style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/colorWhite" />

</android.support.v7.widget.Toolbar>

<android.support.v7.widget.CardView
    android:id="@+id/fault_card"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="@dimen/Toolbar"
    android:fitsSystemWindows="@bool/fitsSystemWindows">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="16dp"
            android:layout_marginEnd="16dp"
            android:layout_marginStart="16dp"
            android:layout_marginTop="8dp"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

                <TextView
                    android:id="@+id/item_tittle"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginEnd="16dp"
                    android:ellipsize="marquee"
                    android:singleLine="true"
                    android:text="Nombre"
                    android:textAppearance="@style/TextAppearance.AppCompat.Headline"
                    android:textColor="@color/colorPrimaryTextDefaultMaterialLight" />

            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

                <TextView
                    android:id="@+id/second_item"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:ellipsize="marquee"
                    android:singleLine="true"
                    android:text="Apellidos"
                    android:textAppearance="@style/TextAppearance.AppCompat.Body1"
                    android:textColor="@color/colorSecondaryTextDefaultMaterialLight" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

                <TextView
                    android:id="@+id/third_item"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:ellipsize="marquee"
                    android:singleLine="true"
                    android:text="Correo electrónico"
                    android:textAppearance="@style/TextAppearance.AppCompat.Body2"
                    android:textColor="@color/colorSecondaryTextDefaultMaterialLight" />
            </LinearLayout>

            <Spinner
                android:id="@+id/spinner"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_marginLeft="16dp"
                android:layout_marginTop="8dp" />

            <Button
                android:id="@+id/action_button_1"
                style="@style/Widget.AppCompat.Button.Colored"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="8dp"
                android:layout_marginEnd="16dp"
                android:layout_marginStart="16dp"
                android:layout_marginTop="8dp"
                android:minWidth="0dp"
                android:paddingBottom="8dp"
                android:paddingEnd="16dp"
                android:paddingStart="16dp"
                android:paddingTop="8dp"
                android:text="Falta"
                android:textColor="@color/colorPrimaryTextDefaultMaterialDark"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintStart_toStartOf="parent" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent">

            <android.support.v7.widget.RecyclerView
                android:id="@+id/rvf"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

            </android.support.v7.widget.RecyclerView>

        </LinearLayout>

    </LinearLayout>

</android.support.v7.widget.CardView>

试试看:

public class FaltasActivity extends AppCompatActivity implements OnFaltasReturn, OnAlumnoReturn, OnHorarioReturn {

private TextView nombre, apellidos, correo, titleFault;

private Toolbar toolbar;

private RecyclerView mRecyclerView;
private RecyclerView.LayoutManager mLayoutManager;

private ArrayList<Falta> listaFaltas;
private ArrayList<Horario> listaHorario;
private List<String> list;
private FaltasAdapter adapter;
private ArrayAdapter<String> spinnerAdapter;

private Integer idModulo, idAlumno, idHorario;
private Button falta;
private Spinner spinner;

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

    toolbar = findViewById(R.id.toolbar_faltas);
    titleFault = findViewById(R.id.toolbar_title_fault);
    titleFault.setText("Faltas");
    setSupportActionBar(toolbar);


    // SPINNER I think the spinner is well implemented ... but I can not add the objects to the lists correctly.
    spinner = findViewById(R.id.spinner);

    listaHorario = new ArrayList<>();
    list = new ArrayList<>();

    HorarioATask horarioATask = new HorarioATask(this, this);
    horarioATask.execute();


    //Finish SPINNER code

    idModulo = getIntent().getExtras().getInt("ID_MODULO");
    idAlumno = getIntent().getExtras().getInt("ID_ALUMNO");
    idHorario = 1;  //This is the variable to be replaced when a start is selected.

    nombre = findViewById(R.id.item_tittle);
    apellidos = findViewById(R.id.second_item);
    correo = findViewById(R.id.third_item);

    mRecyclerView = findViewById(R.id.rvf);

    AlumnoATask alumnoATask = new AlumnoATask(this, this, idAlumno);
    alumnoATask.execute();

    listaHorario = new ArrayList<>();

    falta = findViewById(R.id.action_button_1);
    falta.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AsyncTask.execute(new Runnable() {
                @Override
                public void run() {
                    Gson gson = new Gson();
                    final ApiConnector apiConnector = new ApiConnector();
                    final String URI_POST = "faltas";
                    String token;

                    String uri = URI_POST;
                    String method = "POST";
                    String json;

                    Alumno alumno = new Alumno(idAlumno);
                    Modulo modulo = new Modulo(idModulo);
                    Horario horario = new Horario(idHorario);

                    Falta falta = new Falta(alumno, horario, modulo);

                    json = gson.toJson(falta, Falta.class);

                    SharedPreferences prefs = getSharedPreferences("userObject", Context.MODE_PRIVATE);
                    token = prefs.getString("token", "");

                    apiConnector.consult(uri, method, json, token);

                }
            });
        }
    });

    listaFaltas = new ArrayList<>();

    mLayoutManager = new LinearLayoutManager(this);
    mRecyclerView.setHasFixedSize(true);
    adapter = new FaltasAdapter(this, listaFaltas);
    mRecyclerView.setAdapter(adapter);
    mRecyclerView.setLayoutManager(mLayoutManager);

    FaltaATask faltaATask = new FaltaATask(this, this, idAlumno, idModulo);
    faltaATask.execute();

}

@Override
public void onFaltasConsultados(ArrayList<Falta> listaFaltas) {
    this.listaFaltas.clear();
    this.listaFaltas.addAll(listaFaltas);
    this.adapter.notifyDataSetChanged();

     for (int i = 0; i < listaHorario.size(); i++) {
        list.add(listaHorario.get(i).getInicio());
    }

    spinnerAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, list);
    spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    spinner.setAdapter(spinnerAdapter);

}

@Override
public void onFaltasError() {
    Toast.makeText(this, "Error en el listado de faltas", Toast.LENGTH_SHORT).show();
}

@Override
public void onAlumnosConsultados(Alumno alumno) {
    this.nombre.setText(alumno.getNombre());
    this.apellidos.setText(alumno.getApellidos());
    this.correo.setText(alumno.getCorreo());
}

@Override
public void onAlumnosError() {
    Toast.makeText(this, "Error en los datos del alumno", Toast.LENGTH_SHORT).show();
}

//In theory this fills the lists (Interface)
@Override
public void onHorarioConsultados(ArrayList<Horario> listaHorario) {
    this.listaHorario.clear();
    this.listaHorario.addAll(listaHorario);
    this.adapter.notifyDataSetChanged();
}

@Override
public void onHorarioError() {
    Toast.makeText(this, "Error con los horarios", Toast.LENGTH_SHORT).show();
}

}
公共类FaltasActivity扩展了AppCompatActivity在FaltasReturn、OnAllumNoreturn和OnHorarioReturn上实现的AppCompatActivity{
private TextView nombre、apellidos、correo、titleFault;
专用工具栏;
私人回收视图mRecyclerView;
private RecyclerView.LayoutManager MLLayoutManager;
私人ArrayList listaFaltas;
私人ArrayList listaHorario;
私人名单;
专用适配器;
专用阵列适配器;
私有整数idModulo、idAlumno、idHorario;
私人按钮;
私人纺纱机;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_faltas);
工具栏=findViewById(R.id.toolbar_faltas);
titleFault=findviewbyd(R.id.toolbar\u title\u故障);
titleFault.setText(“Faltas”);
设置支持操作栏(工具栏);
//微调器我认为微调器实现得很好…但是我不能正确地将对象添加到列表中。
微调器=findViewById(R.id.spinner);
listaHorario=newarraylist();
列表=新的ArrayList();
HorarioATask HorarioATask=新的HorarioATask(这个,这个);
horarioATask.execute();
//完成微调器代码
idModulo=getIntent().getExtras().getInt(“ID_MODULO”);
idAlumno=getIntent().getExtras().getInt(“ID_校友”);
idHorario=1;//这是选择开始时要替换的变量。
nombre=findviewbyd(R.id.item_title);
apellidos=findViewById(R.id.第二项);
correo=findViewById(R.id.第三项);
mRecyclerView=findviewbyd(R.id.rvf);
Alumnatask Alumnatask=新的Alumnatask(this,this,idAlumno);
AlumnaTask.execute();
listaHorario=newarraylist();
falta=findViewById(R.id.操作按钮1);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
AsyncTask.execute(新的Runnable(){
@凌驾
公开募捐{
Gson Gson=新的Gson();
最终ApiConnector ApiConnector=新ApiConnector();
最终字符串URI_POST=“faltas”;
字符串标记;
字符串uri=uri\u POST;
String method=“POST”;
字符串json;
校友校友=新校友(idAlumno);
模=新模(idModulo);
Horario Horario=新Horario(Idharrio);
Falta Falta=新的Falta(校友,horario,模数);
json=gson.toJson(falta,falta.class);
SharedReferences prefs=getSharedReferences(“userObject”,Context.MODE\u PRIVATE);
token=prefs.getString(“token”,”);
consult(uri、方法、json、令牌);
}
});
}
});
listaFaltas=newarraylist();
mLayoutManager=新的LinearLayoutManager(此);
mRecyclerView.setHasFixedSize(true);
适配器=新的FaltasAdapter(此为ListaAltas);
mRecyclerView.setAdapter(适配器);
mRecyclerView.setLayoutManager(mllayoutmanager);
faltatask faltatask=新的faltatask(this,this,idAlumno,idModulo);
faltatask.execute();
}
@凌驾
FaltasConsultados(ArrayList listaFaltas)上的公共无效{
this.listaFaltas.clear();
public interface OnHorarioReturn {

void onHorarioConsultados(ArrayList<Horario> listaHorario);

void onHorarioError();
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="@bool/fitsSystemWindows"
android:orientation="vertical"
tools:context=".FaltasActivity">

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar_faltas"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimary"
    android:elevation="4dp"
    android:theme="@style/ToolbarTheme"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

    <TextView
        android:id="@+id/toolbar_title_fault"
        style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/colorWhite" />

</android.support.v7.widget.Toolbar>

<android.support.v7.widget.CardView
    android:id="@+id/fault_card"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="@dimen/Toolbar"
    android:fitsSystemWindows="@bool/fitsSystemWindows">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="16dp"
            android:layout_marginEnd="16dp"
            android:layout_marginStart="16dp"
            android:layout_marginTop="8dp"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

                <TextView
                    android:id="@+id/item_tittle"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginEnd="16dp"
                    android:ellipsize="marquee"
                    android:singleLine="true"
                    android:text="Nombre"
                    android:textAppearance="@style/TextAppearance.AppCompat.Headline"
                    android:textColor="@color/colorPrimaryTextDefaultMaterialLight" />

            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

                <TextView
                    android:id="@+id/second_item"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:ellipsize="marquee"
                    android:singleLine="true"
                    android:text="Apellidos"
                    android:textAppearance="@style/TextAppearance.AppCompat.Body1"
                    android:textColor="@color/colorSecondaryTextDefaultMaterialLight" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

                <TextView
                    android:id="@+id/third_item"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:ellipsize="marquee"
                    android:singleLine="true"
                    android:text="Correo electrónico"
                    android:textAppearance="@style/TextAppearance.AppCompat.Body2"
                    android:textColor="@color/colorSecondaryTextDefaultMaterialLight" />
            </LinearLayout>

            <Spinner
                android:id="@+id/spinner"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_marginLeft="16dp"
                android:layout_marginTop="8dp" />

            <Button
                android:id="@+id/action_button_1"
                style="@style/Widget.AppCompat.Button.Colored"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="8dp"
                android:layout_marginEnd="16dp"
                android:layout_marginStart="16dp"
                android:layout_marginTop="8dp"
                android:minWidth="0dp"
                android:paddingBottom="8dp"
                android:paddingEnd="16dp"
                android:paddingStart="16dp"
                android:paddingTop="8dp"
                android:text="Falta"
                android:textColor="@color/colorPrimaryTextDefaultMaterialDark"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintStart_toStartOf="parent" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent">

            <android.support.v7.widget.RecyclerView
                android:id="@+id/rvf"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

            </android.support.v7.widget.RecyclerView>

        </LinearLayout>

    </LinearLayout>

</android.support.v7.widget.CardView>
public class FaltasActivity extends AppCompatActivity implements OnFaltasReturn, OnAlumnoReturn, OnHorarioReturn {

private TextView nombre, apellidos, correo, titleFault;

private Toolbar toolbar;

private RecyclerView mRecyclerView;
private RecyclerView.LayoutManager mLayoutManager;

private ArrayList<Falta> listaFaltas;
private ArrayList<Horario> listaHorario;
private List<String> list;
private FaltasAdapter adapter;
private ArrayAdapter<String> spinnerAdapter;

private Integer idModulo, idAlumno, idHorario;
private Button falta;
private Spinner spinner;

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

    toolbar = findViewById(R.id.toolbar_faltas);
    titleFault = findViewById(R.id.toolbar_title_fault);
    titleFault.setText("Faltas");
    setSupportActionBar(toolbar);


    // SPINNER I think the spinner is well implemented ... but I can not add the objects to the lists correctly.
    spinner = findViewById(R.id.spinner);

    listaHorario = new ArrayList<>();
    list = new ArrayList<>();

    HorarioATask horarioATask = new HorarioATask(this, this);
    horarioATask.execute();


    //Finish SPINNER code

    idModulo = getIntent().getExtras().getInt("ID_MODULO");
    idAlumno = getIntent().getExtras().getInt("ID_ALUMNO");
    idHorario = 1;  //This is the variable to be replaced when a start is selected.

    nombre = findViewById(R.id.item_tittle);
    apellidos = findViewById(R.id.second_item);
    correo = findViewById(R.id.third_item);

    mRecyclerView = findViewById(R.id.rvf);

    AlumnoATask alumnoATask = new AlumnoATask(this, this, idAlumno);
    alumnoATask.execute();

    listaHorario = new ArrayList<>();

    falta = findViewById(R.id.action_button_1);
    falta.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AsyncTask.execute(new Runnable() {
                @Override
                public void run() {
                    Gson gson = new Gson();
                    final ApiConnector apiConnector = new ApiConnector();
                    final String URI_POST = "faltas";
                    String token;

                    String uri = URI_POST;
                    String method = "POST";
                    String json;

                    Alumno alumno = new Alumno(idAlumno);
                    Modulo modulo = new Modulo(idModulo);
                    Horario horario = new Horario(idHorario);

                    Falta falta = new Falta(alumno, horario, modulo);

                    json = gson.toJson(falta, Falta.class);

                    SharedPreferences prefs = getSharedPreferences("userObject", Context.MODE_PRIVATE);
                    token = prefs.getString("token", "");

                    apiConnector.consult(uri, method, json, token);

                }
            });
        }
    });

    listaFaltas = new ArrayList<>();

    mLayoutManager = new LinearLayoutManager(this);
    mRecyclerView.setHasFixedSize(true);
    adapter = new FaltasAdapter(this, listaFaltas);
    mRecyclerView.setAdapter(adapter);
    mRecyclerView.setLayoutManager(mLayoutManager);

    FaltaATask faltaATask = new FaltaATask(this, this, idAlumno, idModulo);
    faltaATask.execute();

}

@Override
public void onFaltasConsultados(ArrayList<Falta> listaFaltas) {
    this.listaFaltas.clear();
    this.listaFaltas.addAll(listaFaltas);
    this.adapter.notifyDataSetChanged();

     for (int i = 0; i < listaHorario.size(); i++) {
        list.add(listaHorario.get(i).getInicio());
    }

    spinnerAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, list);
    spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    spinner.setAdapter(spinnerAdapter);

}

@Override
public void onFaltasError() {
    Toast.makeText(this, "Error en el listado de faltas", Toast.LENGTH_SHORT).show();
}

@Override
public void onAlumnosConsultados(Alumno alumno) {
    this.nombre.setText(alumno.getNombre());
    this.apellidos.setText(alumno.getApellidos());
    this.correo.setText(alumno.getCorreo());
}

@Override
public void onAlumnosError() {
    Toast.makeText(this, "Error en los datos del alumno", Toast.LENGTH_SHORT).show();
}

//In theory this fills the lists (Interface)
@Override
public void onHorarioConsultados(ArrayList<Horario> listaHorario) {
    this.listaHorario.clear();
    this.listaHorario.addAll(listaHorario);
    this.adapter.notifyDataSetChanged();
}

@Override
public void onHorarioError() {
    Toast.makeText(this, "Error con los horarios", Toast.LENGTH_SHORT).show();
}

}