2014-02-11 29 views
1

我一直在使用stackoverflow很長一段時間,但我還沒有決定在這裏發佈我的問題。在android中使用webserivce插入多條記錄

希望任何人都可以幫我這個:

我正在開發一款Android應用,得到在每一天的電話,我想這些電話使用一個Web服務被插入到SQL Server表。

我是一種android begginer,因爲我從來沒有使用過webservices。

到目前爲止,我能夠獲得通話的信息​​並將其顯示在屏幕上。

但是,當我嘗試執行插入到我的數據庫中,插入的唯一記錄是最後一個。我在這裏獲得調用的信息,我調用這個方法來在這裏插入信息: 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(); 
      } 
     } 
    } 
} 
+0

你設置一個破發點,並通過您的代碼步又一個查詢? – Namphibian

+0

謝謝@Nphphibian,是的,我的代碼沒有輸入tareaEnviarABD.execute();方法直到程序結束 – FedePrado

回答

0

我不知道這是否是正確的,但我建立使用變量只發送2個參數的WebService