在android中使用Web服务插入多个记录

时间:2014-02-11 17:02:45

标签: android database web-services insert

我一直在关注stackoverflow很长一段时间了,但我还没有决定在这里发布我的问题。

希望任何人都可以帮助我:

我正在开发一个能够在一天内完成调用的Android应用程序,我希望使用web服务将这些调用插入到SQL服务器表中。

我是一名机器人,因为我从未使用过webservices。

到目前为止,我能够获取通话信息并在显示屏上显示。

但是当我尝试在我的数据库中执行插入时,唯一插入的记录是最后一个。

在while(managedCursor.moveToNext()){}循环中,我获取了调用的信息,并调用方法在此处插入信息: AsyncCallWS tareaEnviarABD = new AsyncCallWS();  tareaEnviarABD.execute();

我正在添加我的活动代码。如果您需要更多代码,请告诉我。

谢谢大家!

import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;

import com.trucka.llamadasdrivers.*;
//import com.trucka.llamadasdrivers.MainActivity.AsyncCallWS;
import com.trucka.llamadasdrivers.R;

import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.CallLog;
import android.widget.TextView;
import android.telephony.*;
import android.util.Log;

import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

public class ActividadLlamadasDrivers extends Activity {
    TextView txtInformacion = null;
    TextView txtDetalles = null;
    // Comunicación con el webservice.
    private final String NAMESPACE = "http://truckanet.com/MensajeOperador";
    private final String URL = "http://192.168.10.94/MensajeOperador/MensajeOperador.asmx";
    private final String SOAP_ACTION = "http://truckanet.com/MensajeOperador/ActualizarFede";
    private final String METHOD_NAME = "ActualizarFede";
    private String TAG = "TRUCKA_DRIVERS";
    private String resultado;
    private String clave = "6737";
    String phNumber = null;
    String callType = null;
    String callDate = null;
    DateFormat shortFecha = null;
    DateFormat shortDF = null;
    Date callDayTime = null;
    String fechaLlamada1 = null;
    String fechaLlamada2 = null;
    String callDuration = null;
    String dir = null;
    String evento;
    String imei = null;
    String fechaRegistro = null;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_actividad_llamadas_drivers);
    txtInformacion = (TextView) findViewById(R.id.textview_call);
    txtDetalles = (TextView)findViewById(R.id.textview_call2);
    getCallDetails();
 }

 // Obtener la fecha actual del teléfono.
 public long getTodayTimestamp(){
     Calendar c1 = Calendar.getInstance();
     c1.setTime(new Date());

     Calendar c2 = Calendar.getInstance();
     c2.set(Calendar.YEAR, c1.get(Calendar.YEAR));
     c2.set(Calendar.MONTH, c1.get(Calendar.MONTH));
     c2.set(Calendar.DAY_OF_MONTH, c1.get(Calendar.DAY_OF_MONTH));
     c2.set(Calendar.HOUR_OF_DAY, 0);
     c2.set(Calendar.MINUTE, 0);
     c2.set(Calendar.SECOND, 0);

     return c2.getTimeInMillis();
 }

 //Obtener el detalle de las llamadas con la fecha actual.
 private void getCallDetails() {
     String timestamp = String.valueOf(getTodayTimestamp());
     StringBuffer sb = new StringBuffer();
     @SuppressWarnings("deprecation")
     Cursor managedCursor = managedQuery(CallLog.Calls.CONTENT_URI, null, CallLog.Calls.DATE + ">= ?", new String[]{timestamp}, null);
     int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER);
     int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE);
     int date = managedCursor.getColumnIndex(CallLog.Calls.DATE);
     int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION);
     sb.append("Bitácora de llamadas :");
     while (managedCursor.moveToNext()) {
         phNumber = managedCursor.getString(number);
         callType = managedCursor.getString(type);
         callDate = managedCursor.getString(date);
         shortFecha = DateFormat.getDateInstance(DateFormat.SHORT);
         shortDF = DateFormat.getTimeInstance(DateFormat.SHORT);
         callDayTime = new Date(Long.valueOf(callDate));
         fechaLlamada1 = shortDF.format(callDayTime);
         fechaLlamada2 = shortFecha.format(callDayTime);
         callDuration = managedCursor.getString(duration);
         int dircode = Integer.parseInt(callType);
         TelephonyManager mngr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
         switch (dircode) {
         case CallLog.Calls.OUTGOING_TYPE:
             dir = "SALIENTE";
             break;

         case CallLog.Calls.INCOMING_TYPE:
             dir = "ENTRANTE";
             break;

         case CallLog.Calls.MISSED_TYPE:
             dir = "PERDIDA";
             break;
         }

         sb.append("\nNúmero de teléfono:--- " + phNumber + " \nTipo de llamada:--- "
                 + dir + " \nFecha de llamada:--- " + fechaLlamada2 + " " + fechaLlamada1
                 + " \nDuración en segundos:--- " + callDuration
                 + " \nDispositivo actual:--" +mngr.getDeviceId());
         sb.append("\n----------------------------------");
         evento = "(LOG) LLAMADA "+dir+" "+fechaLlamada2+" "+fechaLlamada1+" Duración "+callDuration+" "+phNumber;
         //imei = mngr.getDeviceId();
         imei = dir+","+fechaLlamada2+" "+fechaLlamada1+","+callDuration+","+phNumber;
         fechaRegistro = fechaLlamada2;
         AsyncCallWS tareaEnviarABD = new AsyncCallWS();
         tareaEnviarABD.execute();
     }
     txtDetalles.setText(sb);
    }

 private class AsyncCallWS extends AsyncTask<String, Void, Void> {
     @Override
     protected Void doInBackground(String... params) {
         Log.i(TAG,"doInBackground");
         InsertarLlamada(fechaRegistro, evento,"6737","FEDERICO PRADO ALFARO",imei);
         return null;
     }

     @Override
     protected void onPostExecute(Void result) {
         Log.i(TAG, "onPostExecute");
         txtInformacion.setText("Información enviada");
     }

     @Override
     protected void onPreExecute() {
         Log.i(TAG, "onPreExecute");
         txtInformacion.setText("Enviando información...");
     }

     @Override
     protected void onProgressUpdate(Void... values) {
         Log.i(TAG, "onProgressUpdate");
     }

     public void InsertarLlamada(String fechaRegistro, String evento, String cve_tra, String nom_tra, String imei) {
         //Creamos la solicitud
         SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
         //Propiedades que contienen los valores
         PropertyInfo propiedades = new PropertyInfo();
         propiedades.setName("fechaRegistro");
         propiedades.setValue(fechaRegistro);
         propiedades.setType(String.class);
         propiedades.setName("evento");
         propiedades.setValue(evento);
         propiedades.setType(String.class);
         propiedades.setName("cve_tra");
         propiedades.setValue(cve_tra);
         propiedades.setType(String.class);
         propiedades.setName("nom_tra");
         propiedades.setValue(nom_tra);
         propiedades.setType(String.class);
         propiedades.setName("idMobil");
         propiedades.setValue(imei);
         propiedades.setType(String.class);
         //Agregamos las propiedades
         request.addProperty(propiedades);
         //Creamos el envelope
         SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                 SoapEnvelope.VER11);
         envelope.dotNet = true;
         //ponemos la salida SOAP
         envelope.setOutputSoapObject(request);
         //Creamos la llamada HTTP
         HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

         try {
             //Invocamos el servicio
             androidHttpTransport.call(SOAP_ACTION, envelope);
             //Obtenemos la respuesta
             Object response = envelope.getResponse();
             //Asignamos el resultado de la consulta
             resultado = response.toString();
             } catch (Exception e) {
             resultado = e.getMessage();
             }
         }
    }
}

1 个答案:

答案 0 :(得分:0)

我不知道它是否正确,但我使用变量构建了一个查询,只向webservice发送了2个参数