Seguinte estou lendo um retorno php json e gravando em banco de dados.
Recebo via http, gera o objeto json e percorro o array o problema que 5.000 registros o processo ficou demorado leva cerca de 10 minutos.
Segue os códigos:
Alguma idéia de como posso melhorar o processo?
[java]
private void JSONFileTra(String url){
try{
ContentValues ctv = new ContentValues();
PRI_TraImportados = 0;
//Le a pagina
GetHttp http = new GetHttp(url);
// page contem a string json
page = http.page;
//nativo do SDK da o parse da string json
JSONObject object = (JSONObject) new JSONTokener(page).nextValue();
// monta o array do retorno do json, lembrando que retorno é o PAI do json impresso em page.
//{"retorno":[ {"campo1":"valor1"},{"campo2":"valor2"},{"campo3":"valor3"} ]}
JSONArray message = object.getJSONArray("retorno");
//Abre a Conexão com o banco de dados
SQLiteDatabase db = openOrCreateDatabase("StamDroid.db", Context.MODE_PRIVATE, null);
//Exclui o cadastro de transportadoras somente depois de pegar o arquivo
db.execSQL("DELETE FROM SA4010");
for(int i=0;i<message.length();i++){
JSONObject lines = (JSONObject) new JSONTokener(message.getString(i)).nextValue();
//Código da Transportadora
ctv.put("A4_COD",lines.getString("A4_COD"));
//NOME da Transportadora
ctv.put("A4_NOME", lines.getString("A4_NOME") );
//CGC da Transportadora
ctv.put("A4_CGC",lines.getString("A4_CGC"));
//Pega a data e hora atual
ctv.put("DATAHORA", Funcoes.DataHoraAtual());
try{
if (db.insert("SA4010", "_id", ctv) > 0){
PRI_TraImportados = PRI_TraImportados + 1;
}
}catch (Exception e) {
db.close();
PRI_OK = false;
}
}
db.close();
PRI_OK = true;
}catch (Exception e) {
PRI_OK = false;
}
}
//Classe de apoio geralmente em outro arquivo .java
//Essa classe pode ser entendia mas a princípio não precisa-se mexer nela, ela funciona apenas coloquea no projeto.
//A função dela, basicamente é acessar a pagina que imprime a string json, ler essa string, e coloca-la em page.
class GetHttp {
public String page = "";
public GetHttp(String URL) throws Exception{
BufferedReader bufferedReader = null;
try{
//Permissão
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy);
HttpClient client = new DefaultHttpClient();
client.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "android");
HttpParams params = client.getParams();
HttpConnectionParams.setConnectionTimeout(params, 20000);
HttpConnectionParams.setSoTimeout(params, 15000);
HttpGet request = new HttpGet();
request.setHeader("Content-Type", "text/plain; charset=utf-8");
request.setURI(new URI(URL));
HttpResponse response = client.execute(request);
bufferedReader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuilder stringBuffer = new StringBuilder("");
String line = "";
String NL = System.getProperty("line.separator");
while ((line = bufferedReader.readLine()) != null){
stringBuffer.append(line + NL);
}
bufferedReader.close();
page = stringBuffer.toString();
}catch (Exception e) {
PRI_OK = false;
}finally{
if (bufferedReader != null){
try{
bufferedReader.close();
}catch (IOException e){
}
}
}
}
}
[/java]
A linha “JSONObject object = (JSONObject) new JSONTokener(page).nextValue();” demora mais de 50 segundos…