Algoritmo de sincronização no Android (SQLite para Remote Server Database)
8 respostas
S
serraventura
Pessoal, estou montando uma app que vou precisar ficar sincronizando os dados do SQLite pra um banco de dados remoto, a principio será unidirecional Android atualizando banco na internet, mas queria saber a melhor maneira de fazer, a boa prática. Existe algum algoritmo de sincronização conhecido já bastante utilizado?
Pessoal, pesquisando cheguei a conclusão que não tem como eu acessar um BD remotamente do android, vou precisar criar um webservice para o android conseguir acessar, então o foco da pesquisa agora muda.
Mas a outra forma que me parece viável é utilizando algumas ferramentas de sincronização de BD, que não é o que preciso no momento…
bom pra quem tiver procurando algo desse tipo fica ae os links que achei.
packagebr.com.junior.clientes;importjava.util.ArrayList;importjava.util.List;importorg.apache.http.NameValuePair;importorg.apache.http.message.BasicNameValuePair;importorg.json.JSONException;importorg.json.JSONObject;importbr.com.junior.clientes.R;importandroid.annotation.SuppressLint;importandroid.app.Activity;importandroid.app.AlertDialog.Builder;importandroid.app.ProgressDialog;importandroid.content.Context;importandroid.content.DialogInterface;importandroid.content.Intent;importandroid.database.Cursor;importandroid.database.sqlite.SQLiteDatabase;importandroid.net.ConnectivityManager;importandroid.net.NetworkInfo.State;importandroid.os.AsyncTask;importandroid.os.Bundle;importandroid.os.Handler;importandroid.os.Message;importandroid.util.Log;importandroid.view.View;importandroid.widget.Button;importandroid.widget.TextView;importandroid.widget.Toast;//@ Junior - Cadastro de Clientes 10/07/2012@SuppressLint("HandlerLeak")publicclassReplicarClientesextendsActivity{privateCursorc=null;privateinttotalDB=0;privateinttotal=0;privateProgressDialogpg;privateSQLiteDatabasedb;JSONParserjsonParser=newJSONParser();// url to create new productprivatestaticStringurl_create_product="http://teste/inserir_cliente.php";//http://gdias.ind.br/gdroid/home_local.php// JSON Node namesprivatestaticfinalStringTAG_SUCCESS="success";@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.replicar);ButtonbtnIniciar=(Button)findViewById(R.id.btnIniciar);TextViewtxvTotal=(TextView)findViewById(R.id.txvTotal);db=openOrCreateDatabase("gdroid.db",Context.MODE_PRIVATE,null);c=db.rawQuery("SELECT * FROM clientes",null);totalDB=c.getCount();txvTotal.setText("Total Registros: "+String.valueOf(totalDB));if(totalDB==0)btnIniciar.setEnabled(false);// Verifica Conex�oConnectivityManagerconn=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);if(conn.getNetworkInfo(0).getState()==State.CONNECTED||(conn.getNetworkInfo(1).getState()==State.CONNECTED))btnIniciar.setEnabled(true);else{btnIniciar.setEnabled(false);txvTotal.setText("Você precisa de conexão!");}btnIniciar.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewarg0){Buildermsg=newBuilder(ReplicarClientes.this);msg.setMessage("Deseja iniciar a replicação?");msg.setPositiveButton("SIM",newDialogInterface.OnClickListener(){@OverridepublicvoidonClick(DialogInterfacearg0,intarg1){newCreateNewProduct().execute();}});msg.setNegativeButton("Não",null);msg.show();}});}classCreateNewProductextendsAsyncTask<String,String,String>{/** * Before starting background thread Show Progress Dialog * */@OverrideprotectedvoidonPreExecute(){super.onPreExecute();pg=ProgressDialog.show(ReplicarClientes.this,"Cadastrando...","Aguarde! Este processo pode levar alguns minutos",true,false,null);}protectedStringdoInBackground(String...args){while(c.moveToNext()){Stringempresanome=c.getString(c.getColumnIndex("empresanome"));Stringcpf=c.getString(c.getColumnIndex("cpf"));Stringcnpj=c.getString(c.getColumnIndex("cnpj"));Stringpessoatipo=c.getString(c.getColumnIndex("pessoatipo"));Stringtipodevenda=c.getString(c.getColumnIndex("tipodevenda"));Stringsuframa=c.getString(c.getColumnIndex("suframa"));Stringcidade=c.getString(c.getColumnIndex("cidade"));Stringbairro=c.getString(c.getColumnIndex("bairro"));Stringinsest=c.getString(c.getColumnIndex("insest"));Stringfone=c.getString(c.getColumnIndex("fone"));Stringfax=c.getString(c.getColumnIndex("fax"));Stringcontato=c.getString(c.getColumnIndex("contato"));Stringemail=c.getString(c.getColumnIndex("email"));Stringcob_cep=c.getString(c.getColumnIndex("cob_cep"));Stringcob_cidade=c.getString(c.getColumnIndex("cob_cidade"));Stringcob_bairro=c.getString(c.getColumnIndex("cob_bairro"));Stringobservacao=c.getString(c.getColumnIndex("observacao"));Stringalerta=c.getString(c.getColumnIndex("alerta"));Stringestado=c.getString(c.getColumnIndex("estado"));List<NameValuePair>params=newArrayList<NameValuePair>();params.add(newBasicNameValuePair("empresanome",empresanome));params.add(newBasicNameValuePair("cpf",cpf));params.add(newBasicNameValuePair("cnpj",cnpj));params.add(newBasicNameValuePair("pessoatipo",pessoatipo));params.add(newBasicNameValuePair("tipodevenda",tipodevenda));params.add(newBasicNameValuePair("suframa",suframa));params.add(newBasicNameValuePair("cidade",cidade));params.add(newBasicNameValuePair("bairro",bairro));params.add(newBasicNameValuePair("insest",insest));params.add(newBasicNameValuePair("fone",fone));params.add(newBasicNameValuePair("fax",fax));params.add(newBasicNameValuePair("contato",contato));params.add(newBasicNameValuePair("email",email));params.add(newBasicNameValuePair("cob_cep",cob_cep));params.add(newBasicNameValuePair("cob_cidade",cob_cidade));params.add(newBasicNameValuePair("cob_bairro",cob_bairro));params.add(newBasicNameValuePair("observacao",observacao));params.add(newBasicNameValuePair("alerta",alerta));params.add(newBasicNameValuePair("estado",estado));// getting JSON Object// Note that create product url accepts POST methodJSONObjectjson=jsonParser.makeHttpRequest(url_create_product,"POST",params);// check log cat fro responseLog.d("Create Response",json.toString());// Transforma String em URLtry{intsuccess=json.getInt(TAG_SUCCESS);if(success==1){total+=1;db.execSQL("DELETE FROM clientes WHERE id = "+c.getInt(c.getColumnIndex("id")));Intenti=newIntent(getApplicationContext(),Principal.class);startActivity(i);// closing this screenfinish();}}catch(JSONExceptione){e.printStackTrace();}}handler.sendEmptyMessage(0);returnnull;}protectedvoidonPostExecute(Stringfile_url){// dismiss the dialog once donepg.dismiss();}privateHandlerhandler=newHandler(){@OverridepublicvoidhandleMessage(Messagemsg){if(total==totalDB){Toast.makeText(getBaseContext(),"Sucesso: total de "+total+"/"+totalDB,Toast.LENGTH_LONG).show();}finish();}};}}
M
marciofermino
amigos na verdade eu consegui acessar um banco mysql remoto e vice versa
A
alanl
Márcio, como você fez para acessar um banco de dados remotamente e vice-versa?
A
aechiara
acho que seria melhor vc fazer a sincronização de outra forma, se for só para mandar do android para algum servidor, crie um serviço no servidor que recebe JSON ou XML e envie as requisições do android, dessa forma vc pode até usar https / autenticação por exemplo
A
alanl
Preciso tirar uma foto do celular e enviar para o banco de dados do meu site.
Alguém poderia informa a melhor forma para fazer isso.
Se for possível postar o código principal do Android e do PHP eu agradeço muito.
Estou pesquisando na internet, mas não encontro nada parecido. Apenas uma aplicação que envia uma foto para um servidor Java.
A
aechiara
alanl:
Preciso tirar uma foto do celular e enviar para o banco de dados do meu site.
Alguém poderia informa a melhor forma para fazer isso.
Se for possível postar o código principal do Android e do PHP eu agradeço muito.
Estou pesquisando na internet, mas não encontro nada parecido. Apenas uma aplicação que envia uma foto para um servidor Java.