Autore Topic: Connessione a db Sqlite da progetto Android  (Letto 1167 volte)

Offline First01

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
Connessione a db Sqlite da progetto Android
« il: 10 Giugno 2013, 16:58:37 CEST »
0
Salve, come da oggetto dovrei connettermi ad un db sqlite creato con un software esterno dal mio progetto Android.
Ho letto alcune guide ma non ho capito molto, in Java ero abituato ad usare le stringhe di connessione con Jdbc, ma qui nel progetto Android non so se è fattibile o meno.
Potreste aiutarmi ? Grazie mille!

Offline franz

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy W
  • Sistema operativo:
    Fedora 17
Re:Connessione a db Sqlite da progetto Android
« Risposta #1 il: 14 Giugno 2013, 11:23:07 CEST »
0
Ciao , ho il tuo stesso problema , ho provato a fare una cosa del genere!
Codice (Java): [Seleziona]
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.LinkedList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;


public class DBHelper extends SQLiteOpenHelper {

    private Context context;

    private String DB_PATH;
    private static String DB_NAME = "mioDB";

    public SQLiteDatabase dataBase;

    public DBHelper(Context context) throws IOException {
       
        super(context, DB_NAME, null, 1);
        this.context = context;
        DB_PATH = "data/data/ "+context.getPackageName() +"/databases/";  
        boolean esiste = verificaDB();
        if (!esiste) {
                creaDB();
        }
    }

    public void creaDB() throws IOException {
        boolean esiste = verificaDB();
        if (!esiste) {
                 this.getWritableDatabase();
                 this.close();
             try {
                 copiaDB();
             } catch (IOException e) {
                 throw new Error("errore durante la copia");
             }
        }
    }

    private boolean verificaDB() {
        boolean esiste = false;
        try {
            File file = new File(DB_PATH + DB_NAME);
            esiste = file.exists();
        } catch (SQLiteException e) {
            System.out.println("Database non trovato");
            e.printStackTrace();
        }

        return esiste;
    }

    private void copiaDB() throws IOException {
       
        InputStream in = context.getAssets().open(DB_NAME);
        OutputStream out = new FileOutputStream("data/data/"+context.getPackageName()+"/databases/mioDB");

        byte[] byteArray = new byte[1024];
        int lunghezza =in.read(byteArray);
        while (lunghezza > 0) {
            out.write(byteArray, 0, lunghezza);
            lunghezza =in.read(byteArray);
        }
       
        out.flush();
        out.close();
        in.close();

    }

    public void open() {
        dataBase = SQLiteDatabase.openDatabase(DB_PATH + DB_NAME, null,
                SQLiteDatabase.OPEN_READWRITE);

    }

    public synchronized void close() {
        if(dataBase!=null)
                dataBase.close();
        super.close();
}
 

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }
}

ma purtoppo ricevo questo errore!
Codice: [Seleziona]
06-14 09:04:59.132: W/dalvikvm(957): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
06-14 09:04:59.182: E/AndroidRuntime(957): FATAL EXCEPTION: main
06-14 09:04:59.182: E/AndroidRuntime(957): java.lang.Error: errore durante la copia
06-14 09:04:59.182: E/AndroidRuntime(957):         at it.franz.time_line.gestioneDB.DBHelper.creaDB(DBHelper.java:62)
06-14 09:04:59.182: E/AndroidRuntime(957):         at it.franz.time_line.gestioneDB.DBHelper.<init>(DBHelper.java:47)
06-14 09:04:59.182: E/AndroidRuntime(957):         at it.franz.time_line.GameActivity.onCreate(GameActivity.java:56)
06-14 09:04:59.182: E/AndroidRuntime(957):         at android.app.Activity.performCreate(Activity.java:5104)
06-14 09:04:59.182: E/AndroidRuntime(957):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
06-14 09:04:59.182: E/AndroidRuntime(957):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
06-14 09:04:59.182: E/AndroidRuntime(957):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
06-14 09:04:59.182: E/AndroidRuntime(957):         at android.app.ActivityThread.access$600(ActivityThread.java:141)
06-14 09:04:59.182: E/AndroidRuntime(957):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
06-14 09:04:59.182: E/AndroidRuntime(957):         at android.os.Handler.dispatchMessage(Handler.java:99)
06-14 09:04:59.182: E/AndroidRuntime(957):         at android.os.Looper.loop(Looper.java:137)
06-14 09:04:59.182: E/AndroidRuntime(957):         at android.app.ActivityThread.main(ActivityThread.java:5041)
06-14 09:04:59.182: E/AndroidRuntime(957):         at java.lang.reflect.Method.invokeNative(Native Method)
06-14 09:04:59.182: E/AndroidRuntime(957):         at java.lang.reflect.Method.invoke(Method.java:511)
06-14 09:04:59.182: E/AndroidRuntime(957):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-14 09:04:59.182: E/AndroidRuntime(957):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-14 09:04:59.182: E/AndroidRuntime(957):         at dalvik.system.NativeStart.main(Native Method)

magari qualcuno può aiutarci entrambi!
« Ultima modifica: 14 Giugno 2013, 11:28:04 CEST da franz, Reason: l\'ho modificato c\'erano delle cose che non servivano! »

Offline First01

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
Re:Connessione a db Sqlite da progetto Android
« Risposta #2 il: 14 Giugno 2013, 14:40:10 CEST »
0
Speriamo..

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Connessione a db Sqlite da progetto Android
« Risposta #3 il: 14 Giugno 2013, 16:10:29 CEST »
0
Ma intendi un db remoto, oppure un file in locale?

Se hai un db remoto, potresti utilizzare una pagina in php che ti restituisce un json, che puoi parsare facilmente!  ;-)
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline First01

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
Re:Connessione a db Sqlite da progetto Android
« Risposta #4 il: 14 Giugno 2013, 16:21:06 CEST »
0
allora io ho un database che ho fatto con un tool di SQLite e e lo devo utilizzare all'interno di un progetto android, quindi dovrei connettermi a questo db oppure importarlo in qualche modo..

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Connessione a db Sqlite da progetto Android
« Risposta #5 il: 14 Giugno 2013, 16:53:57 CEST »
0
Se non deve essere "centralizzato" per ogni applicazione, allora mettilo in locale, dentro la cartella "assets"

Using your own SQLite database in Android applications
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline franz

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy W
  • Sistema operativo:
    Fedora 17
Re:Connessione a db Sqlite da progetto Android
« Risposta #6 il: 15 Giugno 2013, 18:44:16 CEST »
0
grazie theBaffo per la risposta , il fatto è che io avevo già seguito quella guida e mi da un errore durante la copia la prima volta che la avvio , la seconda volta ha creato il database ( ovviamente in modo errato) e infatti  risulta vuoto (se lo interrogo mi da l'errore "no such table", solo che non riesco a trovare l'errore.
P.S. Il database è ok se lo apro da terminale.

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Connessione a db Sqlite da progetto Android
« Risposta #7 il: 17 Giugno 2013, 09:16:01 CEST »
0
Che errore ti dà di preciso? Puoi postare il logcat?
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline franz

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy W
  • Sistema operativo:
    Fedora 17
Re:Connessione a db Sqlite da progetto Android
« Risposta #8 il: 18 Giugno 2013, 13:27:30 CEST »
0
Alla fine ho risolto semplicemente eliminando l'estensione del file dove era salvato il database , chissà perchè...grazie comunque della disponibilità!

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Connessione a db Sqlite da progetto Android
« Risposta #9 il: 18 Giugno 2013, 15:24:11 CEST »
0
Tranquillo, il forum serve a questo, no?  ;-)
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline tafazzi87

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google nexus 7 - acer E330
  • Sistema operativo:
    Ubuntu 12.04 - Mac OS X 10.6.8
Re:Connessione a db Sqlite da progetto Android
« Risposta #10 il: 19 Giugno 2013, 20:25:23 CEST »
0
ragazzi scusate premetto che sono alle prime armi, ma non capisco quale è il problema...io ho seguito la guida scritta un po' di post sopra l'applicazione parte ma non capisco se viene o meno creato il database, come faccio a capirlo? perchè non succede niente nell'applicazione...questo è il codice :
MainActivity.java
Codice (Java): [Seleziona]
package com.example.database;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.io.File;
import java.io.IOException;

public class MainActivity extends Activity {
    private DatabaseClass db;
    static double lat,lon;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MyOpenHelper helper=new MyOpenHelper(this);


        try{
            helper.createDataBase();
        }catch (IOException e){
            throw new Error("Non posso creare il database");
        }
        try{
            helper.openDataBase();
        }catch (SQLiteException e){
            throw e;
        }
        db=new DatabaseClass(helper);
        LocationManager location2= (LocationManager) getSystemService(getApplicationContext().LOCATION_SERVICE);
        LocationListener listenergps=new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {
                lat=location.getLatitude();
                lon=location.getLongitude();
                TextView posizione=(TextView) findViewById(R.id.posizione);
                posizione.setText(lat+" , "+lon);

            }

            @Override
            public void onStatusChanged(String s, int i, Bundle bundle) {

            }

            @Override
            public void onProviderEnabled(String s) {
                Toast.makeText(getApplicationContext(), "Gps Attivo", Toast.LENGTH_LONG).show();
            }

            @Override
            public void onProviderDisabled(String s) {
                Toast.makeText(getApplicationContext(),"Gps Disattivato", Toast.LENGTH_LONG).show();
            }
        };
        location2.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,listenergps);
        Button bottone=(Button) findViewById(R.id.button);
        bottone.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                double a=db.puntovicino(lat,lon);
                TextView distanza=(TextView) findViewById(R.id.distanza);
                distanza.setText((int)a);
                db.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;
    }
   
}
DatabaseClass.java
Codice (Java): [Seleziona]
package com.example.database;

import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteDatabase;
import android.location.Location;

import java.io.File;

/**
 * Created by tafazzi87 on 18/06/13.
 */

public class DatabaseClass {
    MyOpenHelper o;
    public DatabaseClass(MyOpenHelper oh){
        o=oh;
    }
    public double min(double[] a){
        double min=a[0];
        for (int i=0;i<a.length;i++){
            if(a[i]<min){
                min=a[i];
            }
        }
        return min;
    }
    //metodo che ritorna la stringa della linea più vicina alla posizione
    public double puntovicino(double lat,double lon){
        SQLiteDatabase db=o.getReadableDatabase();
        Location posizione=new Location("position");
        posizione.setLatitude(lat);
        posizione.setLongitude(lon);
        String[] a=new String[]{"lat","long"};
        Cursor cu=db.query("linee",a,null,null,null,null,null);
        if (cu!=null){
            cu.moveToFirst();
        }
        long rows= DatabaseUtils.queryNumEntries(db,"linee");
        double arraylatitudine[] =new double[(int)rows];
        double arraylongitudine[] =new double[(int)rows];
        int latindex=cu.getColumnIndex("lat");
        int lonindex=cu.getColumnIndex("long");
        while(cu.moveToNext()){
            for(int i=0;i<arraylatitudine.length;i++){
                arraylatitudine[i]=cu.getFloat(latindex);
            }
            for(int j=0;j<arraylongitudine.length;j++){
                arraylongitudine[j]=cu.getFloat(lonindex);
            }
        }
        cu.close();
        double arraydistanza[]=new double[(int)rows];
        for (int i=0;i<(int)rows;i++){
            Location punto=new Location("stazione");
            punto.setLongitude(arraylongitudine[i]);
            punto.setLatitude(arraylatitudine[i]);
            arraydistanza[i]=posizione.distanceTo(punto);
        }
        double min=min(arraydistanza);
        return min;
    }
    //metodo che chiude il database
    public void close(){
        SQLiteDatabase db=o.getReadableDatabase();
        db.close();
    }
}
MyOpenHelper.java
Codice (Java): [Seleziona]
package com.example.database;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * Created by tafazzi87 on 18/06/13.
 */

public class MyOpenHelper extends SQLiteOpenHelper {

        //The Android's default system path of your application database.
        private static String DB_PATH = "/data/data/com.example.database/databases/";

        private static String DB_NAME = "orari";

        private SQLiteDatabase myDataBase;

        private final Context myContext;

        /**
         * Constructor
         * Takes and keeps a reference of the passed context in order to access to the application assets and resources.
         * @param context
         */

        public MyOpenHelper(Context context) {

            super(context, DB_NAME, null, 1);
            this.myContext = context;
        }

        /**
         * Creates a empty database on the system and rewrites it with your own database.
         * */

        public void createDataBase() throws IOException{

            boolean dbExist = checkDataBase();

            if(dbExist){
                //do nothing - database already exist
            }else{

                //By calling this method and empty database will be created into the default system path
                //of your application so we are gonna be able to overwrite that database with our database.
                this.getReadableDatabase();

                try {

                    copyDataBase();

                } catch (IOException e) {

                    throw new Error("Error copying database");

                }
            }

        }

        /**
         * Check if the database already exist to avoid re-copying the file each time you open the application.
         * @return true if it exists, false if it doesn't
         */

        private boolean checkDataBase(){

            SQLiteDatabase checkDB = null;

            try{
                String myPath = DB_PATH + DB_NAME;
                checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

            }catch(SQLiteException e){

                //database does't exist yet.

            }

            if(checkDB != null){

                checkDB.close();

            }

            return checkDB != null ? true : false;
        }

        /**
         * Copies your database from your local assets-folder to the just created empty database in the
         * system folder, from where it can be accessed and handled.
         * This is done by transfering bytestream.
         * */

        private void copyDataBase() throws IOException{

            //Open your local db as the input stream
            InputStream myInput = myContext.getAssets().open(DB_NAME);

            // Path to the just created empty db
            String outFileName = DB_PATH + DB_NAME;

            //Open the empty db as the output stream
            OutputStream myOutput = new FileOutputStream(outFileName);

            //transfer bytes from the inputfile to the outputfile
            byte[] buffer = new byte[1024];
            int length;
            while ((length = myInput.read(buffer))>0){
                myOutput.write(buffer, 0, length);
            }

            //Close the streams
            myOutput.flush();
            myOutput.close();
            myInput.close();

        }

        public void openDataBase() throws SQLiteException{

            //Open the database
            String myPath = DB_PATH + DB_NAME;
            myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

        }

        @Override
        public synchronized void close() {

            if(myDataBase != null)
                myDataBase.close();

            super.close();

        }

        @Override
        public void onCreate(SQLiteDatabase db) {

        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        }

        // Add your public helper methods to access and get content from the database.
        // You could return cursors by doing "return myDataBase.query(....)" so it'd be easy
        // to you to create adapters for your views.

    }

e questo è il logcat
Codice: [Seleziona]
06-19 18:24:13.640        36-80/?                              E/SurfaceFlinger: ro.sf.lcd_density must be defined as a build property
06-19 18:24:13.720    1025-1025/?                              E/Trace: error opening trace file: No such file or directory (2)
06-19 18:24:15.389       36-186/?                              E/SurfaceFlinger: ro.sf.lcd_density must be defined as a build property
06-19 18:24:21.329      710-710/com.android.exchange           E/ActivityThread: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40d10a38 that was originally bound here
        android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40d10a38 that was originally bound here
        at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969)
        at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863)
        at android.app.ContextImpl.bindService(ContextImpl.java:1418)
        at android.app.ContextImpl.bindService(ContextImpl.java:1407)
        at android.content.ContextWrapper.bindService(ContextWrapper.java:473)
        at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157)
        at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145)
        at com.android.emailcommon.service.AccountServiceProxy.getDeviceId(AccountServiceProxy.java:116)
        at com.android.exchange.ExchangeService.getDeviceId(ExchangeService.java:1249)
        at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1856)
        at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551)
        at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549)
        at android.os.AsyncTask$2.call(AsyncTask.java:287)
        at java.util.concurrent.FutureTask.run(FutureTask.java:234)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
        at java.lang.Thread.run(Thread.java:856)
06-19 18:24:21.359      710-710/com.android.exchange           E/StrictMode: null
        android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40d10a38 that was originally bound here
        at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969)
        at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863)
        at android.app.ContextImpl.bindService(ContextImpl.java:1418)
        at android.app.ContextImpl.bindService(ContextImpl.java:1407)
        at android.content.ContextWrapper.bindService(ContextWrapper.java:473)
        at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157)
        at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145)
        at com.android.emailcommon.service.AccountServiceProxy.getDeviceId(AccountServiceProxy.java:116)
        at com.android.exchange.ExchangeService.getDeviceId(ExchangeService.java:1249)
        at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1856)
        at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551)
        at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549)
        at android.os.AsyncTask$2.call(AsyncTask.java:287)
        at java.util.concurrent.FutureTask.run(FutureTask.java:234)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
        at java.lang.Thread.run(Thread.java:856)
06-19 18:24:21.379      710-710/com.android.exchange           E/ActivityThread: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40d104e0 that was originally bound here
        android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40d104e0 that was originally bound here
        at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969)
        at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863)
        at android.app.ContextImpl.bindService(ContextImpl.java:1418)
        at android.app.ContextImpl.bindService(ContextImpl.java:1407)
        at android.content.ContextWrapper.bindService(ContextWrapper.java:473)
        at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157)
        at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145)
        at com.android.emailcommon.service.ServiceProxy.test(ServiceProxy.java:191)
        at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1850)
        at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551)
        at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549)
        at android.os.AsyncTask$2.call(AsyncTask.java:287)
        at java.util.concurrent.FutureTask.run(FutureTask.java:234)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
        at java.lang.Thread.run(Thread.java:856)
06-19 18:24:21.399      710-710/com.android.exchange           E/StrictMode: null
        android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40d104e0 that was originally bound here
        at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969)
        at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863)
        at android.app.ContextImpl.bindService(ContextImpl.java:1418)
        at android.app.ContextImpl.bindService(ContextImpl.java:1407)
        at android.content.ContextWrapper.bindService(ContextWrapper.java:473)
        at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157)
        at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145)
        at com.android.emailcommon.service.ServiceProxy.test(ServiceProxy.java:191)
        at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1850)
        at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551)
        at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549)
        at android.os.AsyncTask$2.call(AsyncTask.java:287)
        at java.util.concurrent.FutureTask.run(FutureTask.java:234)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
        at java.lang.Thread.run(Thread.java:856)