1
I have a webservice that returns to me the following data
Codigodisciplina, Disciplina, Codigoturma.
Starting from a principle that the teacher can have more than one discipline, for example,
Codigodisciplina: 22, Disciplina: Portugues, Codigoturma:40
Codediscipline: 23, Discipline: Matematica, Codeclass:40
I have a table in Sqlite the same attributes above, I need to receive this data and insert in the database. Below follows the code I implemented, but the problem is that it is only inserting the last record, in this case for example:
Codediscipline: 23, Discipline: Matematica, Codeclass:40
Class of the Webservice
public class WsDisciplinas {
private static String SOAP_ACTION ="http://feol/DisciplinasProfessor";
private static String NAMESPACE = "http://feol/";
private static String METHOD_NAME= "DisciplinasProfessor";
private static String URL = "http://192.168.43.175/ServiceFeol.asmx?WSDL";
ArrayList<Disciplinas> listDisciplinas = new ArrayList<>();
Disciplinas disciplinas = new Disciplinas();
public ArrayList<Disciplinas> disciplinas(String codProfessor){
try {
SoapObject resposta = new SoapObject(NAMESPACE, METHOD_NAME);
resposta.addProperty("CodigoPro", codProfessor);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(resposta);
HttpTransportSE http = new HttpTransportSE(URL);
http.call(SOAP_ACTION, envelope);
String resultado = envelope.getResponse().toString();
JSONArray jsonArray = new JSONArray(resultado);
for(int i=0;i<jsonArray.length();i++ ) {
JSONObject jsonObject =jsonArray.getJSONObject(i);
disciplinas.setCodDisciplina(jsonObject.getString("CodMat"));
disciplinas.setDisciplina(jsonObject.getString("Materia"));
disciplinas.setCodTurma(jsonObject.getString("CodTur"));
listDisciplinas.add(i,disciplinas);
}
} catch (HttpResponseException e) {
e.printStackTrace();
} catch (SoapFault soapFault) {
soapFault.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return listDisciplinas;
}
}
DAO class persists data
public class DaoDisciplinas {
private SQLiteDatabase dataBase;
private BancoDados bancoDados;
public DaoDisciplinas(Context context) {bancoDados = new BancoDados(context);}
public String insereDisciplinas(ArrayList<Disciplinas> disciplinasList) {
ContentValues valores;
long resultado = 1;
for (int i =0; i<disciplinasList.size();i++){
dataBase = bancoDados.getWritableDatabase();
valores = new ContentValues();
valores.put("CODDISCIPLINA", disciplinasList.get(i).getCodTurma());
valores.put("DISCIPLINA", disciplinasList.get(i).getDisciplina());
valores.put("CODTURMA", disciplinasList.get(i).getCodTurma());
resultado = dataBase.insertOrThrow("DISCIPLINA", null, valores);
dataBase.close();
valores.put("CODDISCIPLINA", disciplinasList.get(i).getCodTurma());
valores.put("DISCIPLINA", disciplinasList.get(i).getDisciplina());
valores.put("CODTURMA", disciplinasList.get(i).getCodTurma());
dataBase.close();
}
if (resultado == -1)
return "Erro de registro";
else
return "Registro Inserido com sucesso";
}
}
Activity class that executes the download action from the webservice and call the dao class by passing the Arraylist returned by the webservice.
public class DisciplinaActivity extends Activity {
DaoDisciplinas daoDisciplinas = new DaoDisciplinas(this);
WsDisciplinas wsDisciplinas = new WsDisciplinas();
private Button btSincronizar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_disciplina);
btSincronizar = (Button) findViewById(R.id.btSincronizar); btSincronize.setOnClickListener(new View.Onclicklistener() { public void onClick(View v) { btSincronizarOnClick();
}
});
}
private void btSincronizarOnClick() {
String msg = getString(R.string.dlg_msg);
String titulo = getString(R.string.dlg_titulo);
final ProgressDialog dialog = ProgressDialog.show(this, titulo, msg);
new Thread(new Runnable() {
@Override
public void run() {
try {
ArrayList<Disciplinas> disciplinasList = wsDisciplinas.disciplinas("101");
daoDisciplinas.insereDisciplinas(disciplinasList);
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast t = Toast.makeText(getBaseContext(), "Inserido com sucesso", Toast.LENGTH_SHORT);
t.show(); ///gravar na tabela
}
});
} catch (Exception e) {
} finally {
dialog.dismiss();
}
}
}).start();
}
}
Debug and see the amount you have within "disciplinesList.size()" in your DAO, and the moment you add, you can do only "disciplinesList.add(discipline)", instead of setting a position by passing the "i".
– Carlos Bridi
I am beginner in android, how do I debug?
– alannrs
In the IDE you use, (Android Studio or Eclipse), position over the line and hit Ctrl+F8, it will mark the line for debugging. And in the "Run" menu, choose "Debug app". It will run and stop on that line.
– Carlos Bridi
Friend with debugging I found the following, my Jsonobject, this correct it is with the 2 different disciplines, ie the webservice is returning correctly. The problem and in the list of disciplines it is being filled 2 times with the last discipline of Jsonobject. I will debug the line of Return
– alannrs