I'm not sure why you're asking how to do it in AsyncTask, you're already doing it in an AsyncTask ... Also not sure why you're asking about security, what exactly do you want to secure here? Both of these are not related to the first issues you described which have to do with your HTTP client implementation and nothing to do with the AsyncTask itself... for these anyhow, you just need to increase the default values for timeouts. Either way, you should really refactor your code since it has some fundemental issues... any failure in the process will require you to restart the whole thing... if you fail at the last table, you'd have to retrieve all the data beforehand again until you'd get to that table (even though all previous tables are already up to date). Even without seperating those into multiple concurrent tasks, you should at least provide a cache/restore/failover machenism.
On Sunday, May 5, 2013 9:04:52 PM UTC+3, Guilherme Bernardi wrote: > Hi. > > I implemented a process that do multiple web service request to fill the > tables one by one, but I'm having some problems for example: > > - The same process on my Razr(Android 4.0.4) the process completed > normally, but in a smartphone with Android(2.2) for example, I get errors > like 'SocketTimeout', connections problems and exceptions (FutureTask). > > The process: > > on my doInBackground I'm calling all the requests: > > @Override > protected Void doInBackground(Void... params) { > // TODO Auto-generated method stub > Cliente cliente = new Cliente(); > cliente.setWsRepresentante(getSharedPreferences("PREFS_PRIVATE", > MODE_PRIVATE).getInt("representante", 0)); > cliente.importarDados(); > TabelaPreco tabelaPreco = new TabelaPreco(); > tabelaPreco.setWsRepresentante(getSharedPreferences("PREFS_PRIVATE", > MODE_PRIVATE).getInt("representante", 0)); > tabelaPreco.importarDados(); > ClienteEndereco clienteEndereco = new ClienteEndereco(); > clienteEndereco.setWsRepresentante(getSharedPreferences("PREFS_PRIVATE", > MODE_PRIVATE).getInt("representante", 0)); > clienteEndereco.importarDados(); > Comprador comprador = new Comprador(); > comprador.setWsRepresentante(getSharedPreferences("PREFS_PRIVATE", > MODE_PRIVATE).getInt("representante", 0)); > comprador.importarDados(); > ProdutoPreco produtoPreco = new ProdutoPreco(); > produtoPreco.setWsRepresentante(getSharedPreferences("PREFS_PRIVATE", > MODE_PRIVATE).getInt("representante", 0)); > produtoPreco.importarDados(); > Embalagem embalagem = new Embalagem(); > embalagem.setWsRepresentante(getSharedPreferences("PREFS_PRIVATE", > MODE_PRIVATE).getInt("representante", 0)); > embalagem.importarDados(); > Produto produto = new Produto(); > produto.setWsRepresentante(getSharedPreferences("PREFS_PRIVATE", > MODE_PRIVATE).getInt("representante", 0)); > produto.importarDados(); > Grupo grupo = new Grupo(); > grupo.setWsRepresentante(getSharedPreferences("PREFS_PRIVATE", > MODE_PRIVATE).getInt("representante", 0)); > grupo.importarDados(); > FormaPagamento formaPagamento = new FormaPagamento(); > formaPagamento.setWsRepresentante(getSharedPreferences("PREFS_PRIVATE", > MODE_PRIVATE).getInt("representante", 0)); > formaPagamento.importarDados(); > Cidade cidade = new Cidade(); > cidade.setWsRepresentante(getSharedPreferences("PREFS_PRIVATE", > MODE_PRIVATE).getInt("representante", 0)); > cidade.importarDados(); > return null; > } > > This importarDados() call the super method from each class that execute > this process that fill the table with the results: > > DataBase = new > DadosBD(Singleton.getContextoAplicacao()); > SoapObject request = new SoapObject(this.getWsNameSpace(), > this.getWsNomeMetodo()); > request.addProperty("representante", WsRepresentante); > SoapSerializationEnvelope envelope = new > SoapSerializationEnvelope(SoapEnvelope.VER11); > envelope.dotNet = true; > envelope.implicitTypes = false; > envelope.setOutputSoapObject(request); > HttpTransportSE httpTransport = new HttpTransportSE(this.getWsUrl()); > httpTransport.call(this.getWsNameSpace() + "" + this.getWsNomeMetodo(), > envelope); > SoapObject result = (SoapObject) envelope.getResponse(); > if (result != null) { > int resultCount = result.getPropertyCount(); > if(resultCount > 0){ > SoapObject objResult = new SoapObject(); > SoapObject objSoap = new SoapObject(); > objResult = (SoapObject) result.getProperty(1); > if(objResult.getPropertyCount() > 0){ > objSoap = (SoapObject) objResult.getProperty(0); > int propertyResultCount = objSoap.getPropertyCount(); > > if (propertyResultCount > 0){ > > DataBase.BeginTransaction(); > > SQLiteStatement stmtInsert = > DataBase.getDataBase().compileStatement(DataBase.ExecInsertBuilder(Tabela, > TabelaColunaComposta)); > SQLiteStatement stmtSelect = > DataBase.getDataBase().compileStatement(DataBase.ExecSelectBuilder(false, > Tabela, TabelaSelecaoArgumentos, TabelaSelecao, TabelaGroupBy, > TabelaHaving, TabelaOrderBy, "1")); > SQLiteStatement stmtUpdate = > DataBase.getDataBase().compileStatement(DataBase.ExecUpdateBuilder(Tabela, > TabelaColunaComposta, TabelaWhereArgumentos)); > > this.Dados = new ContentValues(); > > for (int currentProperty = 0; currentProperty < > propertyResultCount; currentProperty++) { > > SoapObject obj = (SoapObject) > objSoap.getProperty(currentProperty); > int attributeResultCount = obj.getPropertyCount(); > > for(int index = 0; index < attributeResultCount; > index++){ > > PropertyInfo pi = new PropertyInfo(); > obj.getPropertyInfo(index, pi); > stmtInsert.bindString(index + 1, > ((pi.getValue().toString().equals("anyType{}")?(""):(pi.getValue().toString())))); > stmtUpdate.bindString(index + 1, > ((pi.getValue().toString().equals("anyType{}")?(""):(pi.getValue().toString())))); > this.Dados.put(pi.name.toString(), > ((pi.getValue().toString().equals("anyType{}")?(""):(pi.getValue().toString())))); > } > > for (int i = 0; i < this.getCamposPK().length; > i++) { > stmtSelect.bindString(i + 1, > this.Dados.get(CamposPK[i].toString()).toString()); > } > > if(!(stmtSelect.simpleQueryForLong()==1)){ > stmtInsert.executeInsert(); > }else{ > stmtUpdate.execute(); > } > } > DataBase.SetTransaction(); > DataBase.EndTransaction(); > } > } > } > } > > *How can I implement this process using AsyncTask? I need to create one > AsyncTask to each class?* > > This requests doesn't need to be executed paralelly... > > *How can I improve the security of this process?* > * > * > Thanks in advance. > -- -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en --- You received this message because you are subscribed to the Google Groups "Android Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to android-developers+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.