>

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.



Replicação de dados, não entra no bloco try/catch



erro na classe ExportarVendaService.
A replicação não entra no bloco try/catch, executa o log.d no while e na exception, mas não o que esta dentro do try.
não consigo fazer a replicação dos dados para banco MySQL


//classe ExportarVendaService
package br.com.cet.integracao.vendasexternas;

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;

public class ExportarVendaService extends Service implements Runnable {

@Override
public void onCreate() {
new Thread(ExportarVendaService.this).start();

}

@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public void run() {
SQLiteDatabase bancoVendas = openOrCreateDatabase("venda.db",Context.MODE_PRIVATE, null);

Cursor cursor = bancoVendas.rawQuery("SELECT * FROM vendas",null);
long totalDB = cursor.getCount();
long totalReplicado = 0;

while (cursor.moveToNext()) {

StringBuilder strURL = new StringBuilder();
strURL.append("http://192.168.0.1:80/android/exportarVenda.php?nome="); //crie um spinner também para nome do cliente
strURL.append(cursor.getInt(cursor.getColumnIndex("id_cliente")));
strURL.append("&produto=");
strURL.append(cursor.getInt(cursor.getColumnIndex("produto")));
strURL.append("&preco=");
strURL.append(cursor.getDouble(cursor.getColumnIndex("preco")));
strURL.append("&latitude=");
strURL.append(cursor.getDouble(cursor.getColumnIndex("latitude")));
strURL.append("&longitude=");
strURL.append(cursor.getDouble(cursor.getColumnIndex("longitude")));

Log.d("wExportarVendas", strURL.toString());//Mostra a URL

try {
URL url = new URL(strURL.toString());
HttpURLConnection http = (HttpURLConnection) url.openConnection();

InputStreamReader isr = new InputStreamReader(http.getInputStream());

BufferedReader line = new BufferedReader(isr);

String linhaRetorno = line.readLine();

Log.d("tryExportarVendas", line.toString());//A aplicação não entra no bloco try/catch

if (linhaRetorno.equals("Y")) {
bancoVendas.delete("vendas", "_id=?",new String[] { String.valueOf(cursor.getInt(cursor.getColumnIndex("_id"))) });
totalReplicado++;
Log.d("ifExportarVendas", "if - OK");//A aplicação não executa o if
}
} catch (Exception e) {

Log.d("eExportarVendas", e.getMessage());//Mostra a msg

}

}
bancoVendas.close();
}

}


//classe MainActivity

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

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

StringBuilder sqlProdutos = new StringBuilder();
sqlProdutos.append("CREATE TABLE IF NOT EXISTS produtos(");
sqlProdutos.append("_id INTEGER PRIMARY KEY AUTOINCREMENT,");
sqlProdutos.append("nome VARCHAR (100),");
sqlProdutos.append("preco DOUBLE (10,2));");
bancoVendas.execSQL(sqlProdutos.toString());

//dados inseridos no banco

StringBuilder sqlClientes = new StringBuilder();
sqlClientes.append("CREATE TABLE IF NOT EXISTS clientes(");
sqlClientes.append("_id INTEGER PRIMARY KEY AUTOINCREMENT,");
sqlClientes.append("nome_cli VARCHAR (100));");
bancoVendas.execSQL(sqlClientes.toString());

//dados inseridos no banco

StringBuilder sqlVendas = new StringBuilder();
sqlVendas.append("CREATE TABLE IF NOT EXISTS vendas(");
sqlVendas.append("_id INTEGER PRIMARY KEY AUTOINCREMENT,");
sqlVendas.append("produto INTEGER,");
sqlVendas.append("preco DOUBLE (10,2),");
sqlVendas.append("id_cliente INTEGER,"); //faz uma relação com a tabela cliente
sqlVendas.append("latitude DOUBLE (10,9),");
sqlVendas.append("longitude DOUBLE (10,9));");
bancoVendas.execSQL(sqlVendas.toString());

bancoVendas.close();

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

public void novaVendaClick(View v){
startActivity(new Intent(getBaseContext(),NovaVendaActivity.class));

}
public void listarVendasClick(View v){
startActivity(new Intent(getBaseContext(),ListarVendasActivity.class));
}

public void replicarClick(View v){
startService(new Intent("vendasexternas.INICIAR_SERVICO"));

}

}

//AndroidManifest


package="br.com.cet.integracao.vendasexternas"
android:versionCode="1"
android:versionName="1.0" >

android:minSdkVersion="8"
android:targetSdkVersion="17" />

android:name="br.com.cet.integracao.vendasexternas.permission.MAPS_RECEIVE" //parte do mapa
android:protectionLevel="signature" />


//partes relacionada com mapas






android:glEsVersion="0x00020000"
android:required="true" />

android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
android:name="com.google.android.maps.v2.API_KEY"
android:value="Minha chave aqui" />

android:name="br.com.cet.integracao.vendasexternas.MainActivity"
android:label="@string/app_name" >






















5 Respostas


Olá

Existe dados a ser replicado na tabela vendas? O banco ta certo?




Sim, a aplicação salvar os dados sem erros, e nome do banco esta correto




Olá

O catch retorna algum erro? Se sim qual?

Poste os logs




Olá,

os campos no banco de dados android que vc criou para as coordenadas é latitude e longitude ? Se vc acompanhou as videos os campos são la e lo. No seu codigo está dessa forma:


strURL.append(cursor.getDouble(cursor.getColumnIndex("latitude")));
strURL.append("&longitude=");
strURL.append(cursor.getDouble(cursor.getColumnIndex("longitude")));


O Correto:


strURL.append(cursor.getDouble(cursor.getColumnIndex("la")));
strURL.append("&longitude=");
strURL.append(cursor.getDouble(cursor.getColumnIndex("lo")));





Desculpa pela demora.
Acho que o problema esta com o dispositivo que eu estou usando para testar minha aplicação, porque quando os dados da tabela são setado manualmente, consigo fazer a replicação usando o emulador.
seguir o log

07-05 00:23:12.695: W/PowerManagerService(1523): Timer 0x7->0x3|0x0
07-05 00:23:12.695: I/PowerManagerService(1523): Ulight 7->3|0
07-05 00:23:14.695: W/PowerManagerService(1523): Timer 0x3->0x1|0x0
07-05 00:23:14.695: I/PowerManagerService(1523): Ulight 3->1|0
07-05 00:23:14.992: I/PowerManagerService(1523): Light Animator Finished curIntValue=20
07-05 00:23:15.585: I/InputReader(1523): dispatchTouch::touch event's action is 0
07-05 00:23:15.585: I/InputDispatcher(1523): Delivering touch to current input target
07-05 00:23:15.585: D/PowerManagerService(1523): reactivateScreenLocksLocked mProxIgnoredBecauseScreenTurnedOff=false
07-05 00:23:15.585: I/PowerManagerService(1523): Ulight 1->3|0
07-05 00:23:15.750: I/InputReader(1523): dispatchTouch::touch event's action is 1
07-05 00:23:15.750: I/InputDispatcher(1523): Delivering touch to current input target
07-05 00:23:15.835: I/PowerManagerService(1523): Light Animator Finished curIntValue=143
07-05 00:23:16.609: D/BatteryService(1523): update start
07-05 00:23:19.789: I/InputReader(1523): dispatchTouch::touch event's action is 0
07-05 00:23:19.789: I/InputDispatcher(1523): Delivering touch to current input target
07-05 00:23:20.000: I/InputReader(1523): dispatchTouch::touch event's action is 1
07-05 00:23:20.000: I/InputDispatcher(1523): Delivering touch to current input target
07-05 00:23:20.007: W/AudioPolicyManager(1320): getSituationVolume() situation=1, device=0
07-05 00:23:20.007: W/AudioPolicyManager(1320): getSituationVolume() mSituationVolume=0.500000
07-05 00:23:20.007: V/AudioFlinger(1320): AudioFlinger::createTrack() sampleRate 44100, format 1, channelCount 1, frameCount 8192
07-05 00:23:20.007: V/AudioFlinger(1320): AudioFlinger::createTrack() sessionId: 0
07-05 00:23:20.007: V/AudioFlinger(1320): AudioFlinger::createTrack() lSessionId: 262
07-05 00:23:20.007: V/AudioFlinger(1320): Track constructor name 4098, calling thread 1523
07-05 00:23:20.007: V/AudioFlinger(1320): start(4098), calling thread 1523 session 262
07-05 00:23:20.007: V/AudioFlinger(1320): ? => ACTIVE (4098) on thread 0x61e30
07-05 00:23:20.007: V/AudioPolicyManager(1320): startOutput() output 1, stream 1, session 262
07-05 00:23:20.007: V/AudioPolicyManager(1320): startOutput() mHardwareOutput 1, output 1, mPhoneState 0, mRefCount 0, inputSource 0
07-05 00:23:20.007: V/AudioPolicyManager(1320): getNewDevice() output=1, fromCache=1
07-05 00:23:20.007: E/AudioPolicyManagerBase(1320): unknown stream type
07-05 00:23:20.007: E/AudioPolicyManagerBase(1320): unknown stream type
07-05 00:23:20.007: E/AudioPolicyManagerBase(1320): unknown stream type
07-05 00:23:20.007: V/AudioPolicyManager(1320): getNewDevice() STRATEGY_MEDIA #2
07-05 00:23:20.007: V/AudioPolicyManager(1320): getDeviceForStrategy() from cache strategy 0, device 2
07-05 00:23:20.007: V/AudioPolicyManager(1320): getNewDevice() selected device 2
07-05 00:23:20.007: V/AudioPolicyManager(1320): setOutputDevice() output 1 device 2 delayMs 0
07-05 00:23:20.007: V/AudioPolicyManager(1320): setOutputDevice() setting same device 2 or null device for output 1
07-05 00:23:20.007: E/AudioPolicyManager(1320): Speaker Volume = 0.133352 , device = 2, stream = 1, index = 2
07-05 00:23:20.007: V/AudioFlinger(1320): mWaitWorkCV.broadcast
07-05 00:23:20.007: V/AudioFlinger(1320): MixerThread 0x6f228 TID 1481 waking up
07-05 00:23:20.015: V/AudioPolicyManager(1320): releaseOutput() 1
07-05 00:23:20.015: V/AudioFlinger(1320): remove track (4099) and delete from mixer
07-05 00:23:20.015: V/AudioFlinger(1320): PlaybackThread::Track destructor
07-05 00:23:20.031: D/AudioStreamOutALSA(1320): Preparing the device
07-05 00:23:20.257: I/NotificationService(1523): [NotificationManagerService] Vibration Alert
07-05 00:23:20.289: V/AudioFlinger(1320): getNextBuffer() no more data for track 4098 on thread 0x6f228
07-05 00:23:20.289: V/AudioFlinger(1320): stop(4098), calling thread 1523
07-05 00:23:20.289: V/AudioFlinger(1320): (> STOPPED) => STOPPED (4098) on thread 0x6f228
07-05 00:23:20.289: V/AudioPolicyManager(1320): stopOutput() output 1, stream 1, session 262
07-05 00:23:20.289: V/AudioPolicyManager(1320): stopOutput() mHardwareOutput 1, output 1, mPhoneState 0
07-05 00:23:20.289: V/AudioPolicyManager(1320): getNewDevice() output=1, fromCache=1
07-05 00:23:20.289: E/AudioPolicyManagerBase(1320): unknown stream type
07-05 00:23:20.289: E/AudioPolicyManagerBase(1320): unknown stream type
07-05 00:23:20.289: E/AudioPolicyManagerBase(1320): unknown stream type
07-05 00:23:20.289: E/AudioPolicyManagerBase(1320): unknown stream type
07-05 00:23:20.289: V/AudioPolicyManager(1320): getNewDevice() selected device 0
07-05 00:23:20.289: V/AudioPolicyManager(1320): getNewDevice() output=1, fromCache=1
07-05 00:23:20.289: E/AudioPolicyManagerBase(1320): unknown stream type
07-05 00:23:20.289: E/AudioPolicyManagerBase(1320): unknown stream type
07-05 00:23:20.289: E/AudioPolicyManagerBase(1320): unknown stream type
07-05 00:23:20.289: E/AudioPolicyManagerBase(1320): unknown stream type
07-05 00:23:20.289: V/AudioPolicyManager(1320): getNewDevice() selected device 0
07-05 00:23:20.289: V/AudioPolicyManager(1320): setOutputDevice() output 1 device 0 delayMs 150
07-05 00:23:20.289: V/AudioPolicyManager(1320): setOutputDevice() setting same device 0 or null device for output 1
07-05 00:23:20.328: V/AudioFlinger(1320): TrackBase::reset

log completo