Context: I have a Cordova app that has SUS token forms with more than 30 fields that is sent to the server through JSON. I'm building a native android APP for the same function;
Problem: I need to map the fields (EditText, Spinner, CheckBox and RadioButtons) to JSON objects, in the CORE has the JQuery facility where I get all the fields of the form through the function $ ('form') and send to a function that from the type input in JSON ("input.name", "input.value"), already in Java I do not have this facility and for this reason I am mapping field by field and getting the "values" of each field of the database because the values that should be in the JSON are different from those shown for the user's sealing.
Goal: is there a library or a way to dynamically grab all the form fields in android and do a dynamic function that from the instanceof response of each field I map JSON correctly?
Sample of input mapping code for JSON:
/*
* Geração do JSON apartir do form.
* A principio é tratado campo por campo pela complexidade em mapear as labels
* de RadioGroup e Spinner nos valores requeridos pelo sistema de exportação.
*/
private JSONObject formToJSON(View rootView) throws JSONException {
JSONObject jsonObj = new JSONObject();
/**
* Primeira parte
*/
//Mapeando EditTexts no JSON
//Nome Paciente
jsonObj.put(cadNome.getTag().toString(), cadNome.getText().toString());
//Data Nascimento
jsonObj.put(cadDataNasc.getTag().toString(), cadDataNasc.getText().toString());
//Sexo
String sexo = rootView.findViewById(cadRadGroupSexo.getCheckedRadioButtonId()).getTag().toString();
jsonObj.put(cadRadGroupSexo.getTag().toString(), sexo);
//Tipo Sanguineo
String tipoSanguineo = cadTipoSanguineo.getSelectedItem().toString();
//jsonObj.put(cadRadGroupSexo.getTag().toString(), sexo);
//TODO obter id do tipo no banco de dados e inserir no JSON
//Nome da Mãe
jsonObj.put(cadNomeMae.getTag().toString(), cadNomeMae.getText().toString());
//Check box desconhece nome pai
//TODO ver como se obtem o valor do checkbox e inserir de forma correta no JSON
//Nome pai
jsonObj.put(cadNomePai.getTag().toString(), cadNomePai.getText().toString());
/**
* Segunda parte
*/
//E-mail
jsonObj.put(cadEmail.getTag().toString(), cadEmail.getText().toString());
//Nacionalidade
String nacionalidade = rootView.findViewById(cadRadGroupNac.getCheckedRadioButtonId()).getTag().toString();
jsonObj.put(cadRadGroupNac.getTag().toString(), nacionalidade);
//Pais de nascimento
String paisNascimento = cadPaisNasc.getSelectedItem().toString();
//jsonObj.put(cadPaisNasc.getTag().toString(), );
//TODO obter id do paisNasc no banco de dados e inserir no JSON
//Data naturalização
jsonObj.put(cadDataNatur.getTag().toString(), cadDataNatur.getText().toString());
//Portaria naturalização
jsonObj.put(cadPortariaNatu.getTag().toString(), cadPortariaNatu.getText().toString());
//Data entrada no brasil
jsonObj.put(cadDataEntrada.getTag().toString(), cadDataEntrada.getText().toString());
//Estado
String estado = cadEstado.getSelectedItem().toString();
//TODO obter id do estado no banco de dados e inserir no JSON
//Municipio de nascimento
jsonObj.put(cadMunicipioNasc.getTag().toString(), cadMunicipioNasc.getText().toString());
//Tipo de documento
String tipoDoc = cadTipoDoc.getSelectedItem().toString();
//TODO obter id do Tipo de documento no banco de dados e inserir no JSON
//Documento
jsonObj.put(cadDocumento.getTag().toString(), cadDocumento.getText().toString());
//CNS
jsonObj.put(cadCns.getTag().toString(),cadCns.getText().toString());
//Prontuario
jsonObj.put(cadProntuario.getTag().toString(), cadProntuario.getText().toString());
//CPF
jsonObj.put(cadCpf.getTag().toString(), cadCpf.getText().toString());
//RG
jsonObj.put(cadRg.getTag().toString(), cadRg.getText().toString());
//CTPS
jsonObj.put(cadCtps.getTag().toString(), cadCtps.getText().toString());
//Raca/Cor
String racaCor = cadRacaCor.getSelectedItem().toString();
//TODO obter id do Raca/Cor no banco de dados e inserir no JSON
return null;
}
Template of a function that would be dynamic I'm looking for:
public void formToJson(Inputs input){
if(input instanceof EditText){
//Executo o mepeamento de EditText
}
if(input instanceof Spinner){
//Executo o mapeamento de Spinner
}
//Assim por diante
}