>

Fórum

Fórum da RL System, voltado para analistas, programadores etc. Tudo sobre linguagem de programação e desenvolvimento Full Stack: Banco de Dados, Android, C#, Java, .NET, PHP, Node, Javascript, TypeScript, Front, HTML e muito mais.



A replicação não funciona


Já fiz e refiz varias vezes o código apresentado na aula, mas sempre que vou fazer a replicação não da certo, e o pior é que não aparece erro nenhum, simplesmente não ocorre nada.
Poderiam me ajudar?



23 Respostas


Olá Patrick

Por favor, poste o Logcat (os logs).

Outra coisa, você tem dados para replicar?

Mostre sua classe Replicar aqui no fórum.




Prezado, fiz um app baseado na aula Vendas e a replicação não funciona. Segue o code de ExportarPesquisaService.java, ListarActivity.java e o logCat para análise:
package com.alessonaguiar.hotmail.pesquisadecampo;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

//public class ExportarPesquisaService extends Service implements Runnable{
public class ExportarPesquisaService extends Service implements Runnable {

//Quando o onCrete rodar ele dá um new em thread e chama o médodo Run que faz parte da thread.
public void onCreate(){

//new Thread(ExportarPesquisaService.this).setDaemon(true);
new Thread(ExportarPesquisaService.this).start();
//new Thread(ExportarPesquisaService.this).start();
Log.d("1","Dentro do onCreate");
}

@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub

return null;
}

@Override
public void run() {
Log.d("2","dentro do Run");
SQLiteDatabase db = openOrCreateDatabase("clientes.db", Context.MODE_PRIVATE , null);

Cursor cursor = db.rawQuery("SELECT * FROM clientes", null);
int totalDB = cursor.getCount();
int totalReplicado = 0;
Log.d("3 append","antes do moveToNext");
while(cursor.moveToNext()){
StringBuilder strURL = new StringBuilder();
strURL.append("http://192.168.42.167/clientes/inserir.php?clientes=");
strURL.append(cursor.getInt(cursor.getColumnIndex("nome")));//insere o que pega do java
strURL.append("&nome=");//no xamp
strURL.append(cursor.getInt(cursor.getColumnIndex("nome")));//insere o que pega do java
strURL.append("&email=");//no xamp
strURL.append(cursor.getInt(cursor.getColumnIndex("email")));//insere o que pega do java
strURL.append("&sexo=");//no xamp
strURL.append(cursor.getInt(cursor.getColumnIndex("sexo")));//insere o que pega do java
strURL.append("&vinc_empresa=");//no xamp
strURL.append(cursor.getInt(cursor.getColumnIndex("vinc_empresa")));//insere o que pega do java
strURL.append("&estuda=");//no xamp
strURL.append(cursor.getInt(cursor.getColumnIndex("estuda")));
Log.d("ExportarPesquisaService", "dentro do move");
Log.d("ExportarPesquisaService", strURL.toString());
try {
URL url = new URL(strURL.toString());
HttpURLConnection http = (HttpURLConnection) url.openConnection();
InputStreamReader ips = new InputStreamReader(http.getInputStream());
BufferedReader line = new BufferedReader(ips);

String linhaRetorno = line.readLine();

if(linhaRetorno.equals("y")){
db.delete("clientes", "_id=?", new String[]{String.valueOf(cursor.getInt(0))});
totalReplicado ;
Log.d("ExportarPesquisaService", "ok");
}
}catch (Exception ex) {
// TODO: handle exception
Log.d("ExportarPesquisaService", ex.getMessage());

}
}


db.close();
Log.d("fechou o banco","banco fechado");
if(totalDB == totalReplicado){

}
// TODO Auto-generated method stub
for(int i =0 ; i < 200; i ){
Log.d("ExportarPesquisaService", String.valueOf(i));
try {Thread.sleep(100);
}catch(Exception ex){
Log.d("ExportarPesquisaService", ex.getMessage());

}

}
}

}


O meu banco está nesta estrutura:

SQLiteDatabase db = openOrCreateDatabase("clientes.db", Context.MODE_PRIVATE, null);

StringBuilder sqlProdutos = new StringBuilder();
sqlProdutos.append("CREATE TABLE IF NOT EXISTS [clientes](");
sqlProdutos.append("[_id] INTEGER PRIMARY KEY AUTOINCREMENT, ");
sqlProdutos.append("nome VARCHAR (30) , ");
sqlProdutos.append("email VARCHAR (30) , ");
sqlProdutos.append("sexo VARCHAR (2) , ");
sqlProdutos.append("latitude DOUBLE (10,9) , ");
sqlProdutos.append("longitude DOUBLE (10,9) , ");
sqlProdutos.append("vinc_empresa INTEGER (2) , ");
sqlProdutos.append("estuda INTEGER (2)) ; ");
db.execSQL(sqlProdutos.toString());






Aqui está o log


01-20 11:53:38.821: D/clicou(29569): antes do start
01-20 11:53:38.851: D/depois(29569): startou o Service
01-20 11:53:38.851: D/1(29569): Dentro do onCreate
01-20 11:53:38.851: D/2(29569): dentro do Run
01-20 11:53:38.881: D/3 append(29569): antes do moveToNext
01-20 11:53:38.881: D/ExportarPesquisaService(29569): dentro do move
01-20 11:53:38.881: D/ExportarPesquisaService(29569): http://192.168.42.167/clientes/inserir.php?clientes=0&nome=0&email=0&sexo=0&vinc_empresa=0&estuda=0
01-20 11:53:38.961: D/ExportarPesquisaService(29569): dentro do move
01-20 11:53:38.961: D/ExportarPesquisaService(29569): http://192.168.42.167/clientes/inserir.php?clientes=0&nome=0&email=0&sexo=0&vinc_empresa=0&estuda=0
01-20 11:53:38.991: D/ExportarPesquisaService(29569): dentro do move
01-20 11:53:38.991: D/ExportarPesquisaService(29569): http://192.168.42.167/clientes/inserir.php?clientes=0&nome=0&email=0&sexo=0&vinc_empresa=1&estuda=1
01-20 11:53:39.011: D/ExportarPesquisaService(29569): dentro do move
01-20 11:53:39.011: D/ExportarPesquisaService(29569): http://192.168.42.167/clientes/inserir.php?clientes=0&nome=0&email=0&sexo=0&vinc_empresa=1&estuda=1
01-20 11:53:39.031: D/ExportarPesquisaService(29569): dentro do move
01-20 11:53:39.031: D/ExportarPesquisaService(29569): http://192.168.42.167/clientes/inserir.php?clientes=0&nome=0&email=0&sexo=0&vinc_empresa=1&estuda=0
01-20 11:53:39.041: D/ExportarPesquisaService(29569): dentro do move
01-20 11:53:39.041: D/ExportarPesquisaService(29569): http://192.168.42.167/clientes/inserir.php?clientes=0&nome=0&email=0&sexo=0&vinc_empresa=1&estuda=0
01-20 11:53:39.071: D/ExportarPesquisaService(29569): dentro do move
01-20 11:53:39.071: D/ExportarPesquisaService(29569): http://192.168.42.167/clientes/inserir.php?clientes=0&nome=0&email=0&sexo=0&vinc_empresa=1&estuda=1
01-20 11:53:39.091: D/fechou o banco(29569): banco fechado
01-20 11:53:39.091: D/ExportarPesquisaService(29569): 0
01-20 11:53:39.191: D/ExportarPesquisaService(29569): 1
01-20 11:53:39.311: D/ExportarPesquisaService(29569): 2
01-20 11:53:39.411: D/ExportarPesquisaService(29569): 3
01-20 11:53:39.511: D/ExportarPesquisaService(29569): 4
01-20 11:53:39.621: D/ExportarPesquisaService(29569): 5
01-20 11:53:39.721: D/ExportarPesquisaService(29569): 6
01-20 11:53:39.821: D/ExportarPesquisaService(29569): 7
01-20 11:53:39.921: D/ExportarPesquisaService(29569): 8
01-20 11:53:40.021: D/ExportarPesquisaService(29569): 9




Prezados já resolvi. O problema é que na vídeo aula não ficou claro que quando eu uso o emulador, devo setar o ip: 10.0.2.2 e quando eu uso o meu celular como emulador, seto: o ip da minha máquina local, neste caso uso o ipconfig no CMD para pegar o ip correto.




Prezados ainda sobre projeto acima. Porque quando eu faço a replicação preciso dar um project clean no eclipse para poder replicar novamente?




Prezados ainda sobre projeto acima. Porque quando eu faço a replicação preciso dar um project clean no eclipse para poder replicar novamente?




ola alesson

quando vc faz a replicacao, vc fecha o programa ,ai tem q dar um clean????????????????????

naum entendi !!!!!!!!!




1 . Sim. Tenho que fechar, dar um clean e depois executar novamente para replicar novos registros, isso no emulador. No celular, após replicar tenho que ou rodar novamente ou ir em gerenciador de aplicat, parar o processo, iniciar o app novamente para poder replicar.

2. Como faço para quando mandar o código aqui no post, enviar com as linhas numeradas igual os outros colegas fazem?

3. Quando insiro no SQLite um nome e sobrenome, quando uso o método getColumnIndex() em strURL.append(cursor.gstString(cursor.getColumnIndex("nome"))); ele só traz o nome. Qual o método correto para pegar nome sobrenome, ou o resto da frase que está no campo nome do SQLite?

4. Qual o método eu uso para verificar se o GPS está ativado no emulador ou celular? pq quando tento buscar o local se o GPS estiver desligado, minha aplicação fica em loop infinito e travado, por causa do Toast que diz, "Buscando coordenadas." eu gostaria também de limitar essa busca, tipo se em 5 seg ele não conseguir capturar as coord, ele parar a buscar e sair do onLocationChanged().

Grato pela atenção.




1 vc fez direitinho como esta na video aula.

2 isso so o rafael pode responder pq eu mesmo ja tive problema em colocar os codigos.

3. mas vc esta colocando so o nome campo ou ta colocando o nome e o sobrenome no campo>????

4. veja este topico aki http://rlsystem.com.br/forum/android/530-erro-ao-mostrar-localizacao-no-mapa#top




feedback da última postagem

1 Acredito que sim, mas irei checar para ter a plena certeza.

2. Como faço para chamar o Rafael aqui. Toda vez que faço as perguntas vc sempre me responde.

3. Estou colocando nome e sobrenome, ex: (Alesson Aguiar) e ele me retorna só (Alesson).
Estou usando:
strURL.append(cursor.getString(cursor.getColumnIndex("nome")));

Pergunta: Como pego "Alesson Aguiar"?

4. Não consegui identificar a solução para o meu app com o tópico que vc me passou.

Novas perguntas:

5. Tenho no meu sqlite no campo "estuda" o valor "0 ou 1" adicionado atravez de um check no checkbox da classe Inserir.java. Na activity Editar.java eu gostaria de trazer esse checkbox "checked" caso o valor do campo naquele Id seja 1. Como faço isso? o mesmo para o radio que está no radiogroup.

6. Não entendi exatamente para que serve esse contador abaixo porque quando altero o i para 10 ou 10000 a única diferença que percebo é que o serviço fica lá rodando até zerar o contador. Qual a relevância desse código para a classe ExportarService.java. Explica também um pouco sobre Thread.sleep(100).

for(int i =0, i < 50; i ){
Log.d("ExportarService", String.valueof(i));
try {Thread.sleep(100);
}catch(exception ex){
Log.d("ExportarService", ex.getMessage());
}
}

valeu....




vamos por parte

primeiro no campo nome vc coloca o nome completo e so aparece o primeiro nome????




tem esse exemplo aki de radiobutton

http://theclub.com.br/Restrito/Revistas/201207/andr0712.aspx




Oi André,
Seria melhor numerar as respostas, conforme perguntei acima, assim não misturamos as ideias. Mas enfim, Conforme pergunta 3. eu escrevo o nome completo e o método só me retorna o primeiro nome. qual a solução para ele retornar o nome completo?




primeiro mostre o seu codigo da criacao do banco de dados.......




andré,
Para facilitar segue a baixo o código de criação, inserção e select para enviar para o xamp via Service.

Aqui eu crio o banco

public void onResume(){
super.onResume();

//.MODE_PRIVATE -> SÓ MINHA APLICAÇÃO ACESSA ESSE BANCO
SQLiteDatabase db = openOrCreateDatabase("clientes.db", Context.MODE_PRIVATE, null);

StringBuilder sqlProdutos = new StringBuilder();
sqlProdutos.append("CREATE TABLE IF NOT EXISTS [clientes](");
sqlProdutos.append("[_id] INTEGER PRIMARY KEY AUTOINCREMENT, ");
sqlProdutos.append("nome VARCHAR (30) , ");//posição1
sqlProdutos.append("email VARCHAR (30) , ");//pos2
sqlProdutos.append("sexo VARCHAR (2) , ");//pos3
sqlProdutos.append("latitude VARCHAR (20) , ");//pos4
sqlProdutos.append("longitude VARCHAR (20) , ");//pos5
sqlProdutos.append("vinc_empresa INTEGER (2) , ");//pos6
sqlProdutos.append("estuda INTEGER (2) , ");//pos7
sqlProdutos.append("fone VARCHAR (20)) ; ");//pos8
db.execSQL(sqlProdutos.toString());




Aqui eu insiro:

public void CadastrarClick(View v){


CheckBox checkBox1= (CheckBox) findViewById(R.id.checkBox1);
CheckBox checkBox2= (CheckBox) findViewById(R.id.checkBox2);
TextView txvCheckBox1 = (TextView) findViewById(R.id.txtCheckBox1);
TextView txtCheckBox2 = (TextView) findViewById(R.id.txtCheckBox2);

final RadioGroup rgSx = (RadioGroup) findViewById(R.id.rgSexo);

int chk1, chk2;

EditText edtNome = (EditText) findViewById(R.id.edtNome);
EditText edtEmail = (EditText) findViewById(R.id.edtEmail);

EditText edtFone = (EditText) findViewById(R.id.edtFone);
//----------------------------------Valida se os campos nome e email estão vazios-------------------
if(edtNome.getText().toString().length() <= 0){//pega o texto de txtNome e convert para string
edtNome.setError("Preencha o campo nome!"); //tratando o erro, caso o usuário não tenha preenchido
edtNome.requestFocus();
}else if(edtEmail.getText().toString().length() <= 0){
edtEmail.setError("Preencha o campo E-mail!");
edtEmail.requestFocus();
} else {
try{
SQLiteDatabase db = openOrCreateDatabase("clientes.db", Context.MODE_PRIVATE , null);

Sexo sexo = new Sexo();

switch (rgSx.getCheckedRadioButtonId()) {
case R.id.rb_masc:
sexo.setTipoSX(Sexo.TipoSX.MASCULINO);
break;
case R.id.rb_fem:
sexo.setTipoSX(Sexo.TipoSX.FEMININO);
break;
}


if(checkBox1.isChecked()){
txvCheckBox1.setText("Trabalho");
chk1 = 1;
}else{
chk1 = 0;
}

if(checkBox2.isChecked()){
txtCheckBox2.setText("Estuda");
chk2 = 1;
}else{
chk2 = 0;
}


ContentValues ctv = new ContentValues();

ctv.put("nome", edtNome.getText().toString());
ctv.put("email", edtEmail.getText().toString());
ctv.put("sexo", sexo.getTipoSX().toString());
ctv.put("latitude", Inserir.this.getTxvLa());
ctv.put("longitude", Inserir.this.getTxvL0());
ctv.put("vinc_empresa",chk1);
ctv.put("estuda", chk2);
ctv.put("fone", edtFone.getText().toString());
if(db.insert("clientes", "_id", ctv) > 0){
Toast.makeText(getBaseContext(), "Questionário cadastrado", Toast.LENGTH_SHORT).show();
finish();//volta para a tela anterior.
}else{
Toast.makeText(getBaseContext(), "Questionário não cadastrado.", Toast.LENGTH_SHORT).show();
}
}catch (Exception ex){
Toast.makeText(getBaseContext(), ex.getMessage(), Toast.LENGTH_SHORT).show();
}
}
}

Aqui eu dou o select para enviar:

public void run() {
Log.d("2","dentro do Run");
SQLiteDatabase db = openOrCreateDatabase("clientes.db", Context.MODE_PRIVATE , null);

Cursor cursor = db.rawQuery("SELECT * FROM clientes", null);
int totalDB = cursor.getCount();
int totalReplicado = 0;
Log.d("3 append","antes do moveToNext");
while(cursor.moveToNext()){
StringBuilder strURL = new StringBuilder();
strURL.append("http://10.0.2.2/clientes/inserir.php?clientes=");

//strURL.append("http://169.254.48.83/clientes/inserir.php?clientes=");
strURL.append("&nome=");
strURL.append(cursor.getString(cursor.getColumnIndex("nome")));//insere o que pega do java
strURL.append("&email=");
strURL.append(cursor.getString(cursor.getColumnIndex("email")));//insere o que pega do java
strURL.append("&sexo=");
strURL.append(cursor.getString(cursor.getColumnIndex("sexo")));//insere o que pega do java
strURL.append("&latitude=");
strURL.append(cursor.getString(cursor.getColumnIndex("latitude")));//insere o que pega do java
strURL.append("&longitude=");
strURL.append(cursor.getString(cursor.getColumnIndex("longitude")));//insere o que pega do java
strURL.append("&vinc_empresa=");
strURL.append(cursor.getInt(cursor.getColumnIndex("vinc_empresa")));//insere o que pega do java
strURL.append("&estuda=");
strURL.append(cursor.getInt(cursor.getColumnIndex("estuda")));//insere o que pega do java
strURL.append("&fone=");
strURL.append(cursor.getInt(cursor.getColumnIndex("fone")));*/
//no xamp

Log.d("ExportarPesquisaService", "dentro do move");
Log.d("ExportarPesquisaService", strURL.toString());
try {
URL url = new URL(strURL.toString());
HttpURLConnection http = (HttpURLConnection) url.openConnection();
InputStreamReader ips = new InputStreamReader(http.getInputStream());
BufferedReader line = new BufferedReader(ips);

Log.d("URL", "URL");
String linhaRetorno = line.readLine();

if(linhaRetorno.equals("y")){
db.delete("clientes", "_id=?", new String[]{String.valueOf(cursor.getInt(0))});
totalReplicado ;
Log.d("ExportarPesquisaService", "ok");
}
}catch (Exception ex) {
// TODO: handle exception
Log.d("excessão da URL", ex.getMessage());

}
}


db.close();




e me da tbm o do mysql...




a criacao da tabela.




pq no sqllite esta aparecendo todo o nome , ne?? pq eu num tou vendo erro.....





while(c.moveToNext()){
StringBuilder strURL=new StringBuilder();
strURL.append("http://192.168.1.100/android/inserir.php?nome=");
strURL.append(c.getString(c.getColumnIndex("nome")));
strURL.append("&email=");
strURL.append(c.getString(c.getColumnIndex("email")));
//Log.d("Replicacao",strURL.toString());
try {
URL url = new URL(strURL.toString());
Log.d("Replicacao",url.toString());
HttpURLConnection http = (HttpURLConnection)url.openConnection();
Log.d("HTTP", http.getInputStream().toString());//n pega o getInputStream
InputStreamReader ips = new InputStreamReader(http.getInputStream());
Log.d("IPS", "Passou do IPS");
BufferedReader bf = new BufferedReader(ips);
Log.d("BF", "Passou do BufferedReader");
String linhaRetorno = bf.readLine();
Log.d("Linha Retorno",linhaRetorno);
if(linhaRetorno.equals("Y")){//le as linhas
//total =1;
Toast.makeText(getBaseContext(),"CAIU AQI IF",Toast.LENGTH_SHORT).show();

}

} catch (Exception e) {
// TODO Auto-generated catch block
Toast.makeText(getBaseContext(), e.getMessage(),Toast.LENGTH_SHORT).show();
}


Prezados, de acordo com os erros que o logcat me gerou detectei que o atributo http não tá conseguindo pegar o getInputStream. O que pode ser?




Rodrigo

Se tiver com o erro ainda, peço que abra um novo tópico, para melhor entender seu erro.




Sim André, no SQLITE aparece todo o nome. e ai?




desculpa,

passe o seu projeto p eu dar uma olhada.....

pq ta normal...