CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: carotix con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 7 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 31 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 7 su 7
Discussione:

Non funziona android:launchMode="singleTask"

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Androidiano


    Registrato dal
    Nov 2011
    Località
    Ivrea
    Messaggi
    133

    Ringraziamenti
    7
    Ringraziato 8 volte in 8 Posts
    Predefinito

    Non funziona android:launchMode="singleTask"

    Sto testando la mia applicazione su più tablet di diversa risoluzione.

    Nel mio manifest ho dichiarato questa activity di seguito insieme a tutte le altre

    <activity android:name=".MainActivity" android:launchMode="singleTask" android:label="@string/Home" android:screenOrientation="landscape"></activity>

    Più sul main:

    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

    Sto riscontrando (e impazzendo), su un tablet diverso da quello che ho utilizzato per sviluppare la mia app , una cosa strana..
    Se faccio modifiche sul db (es. cancellazione di un dato, aggiunta di un record, ed ecc..)in altre activity quando torno al main lo ricrea e poi cresha.

    Come è possibile se nel manifest c'è " android:launchMode="singleTask" "?
    Grazie

  2.  
  3. #2
    Androidiano


    Registrato dal
    Nov 2011
    Località
    Ivrea
    Messaggi
    133

    Ringraziamenti
    7
    Ringraziato 8 volte in 8 Posts
    Predefinito

    Umh.. in realtà ho visto che lo fa a volte anche se non faccio modifiche al db.
    A volte lo fa e a volte no..

    Non capisco..

  4. #3
    Androidiano L'avatar di FMsolution


    Registrato dal
    Aug 2010
    Località
    Spoleto (PG)
    Messaggi
    51
    Smartphone
    I5800

    Ringraziamenti
    1
    Ringraziato 5 volte in 5 Posts
    Predefinito

    ciao, ricordati di postare sempre il logcat dell'errore.
    Miei programmi:FMsoluzioni;

    App sviluppate per conto terzi: TLS Travel; RadioNostalgia; 4Clubbers;

    "Solo sul dizionario la parola successo viene prima di sudore"

  5. #4
    Senior Droid L'avatar di frank17next


    Registrato dal
    Jan 2010
    Località
    Campobasso
    Messaggi
    739
    Smartphone
    GNexus, Galaxy Note, GT 10.1

    Ringraziamenti
    16
    Ringraziato 143 volte in 102 Posts
    Predefinito

    Quote Originariamente inviato da genty Visualizza il messaggio
    Sto testando la mia applicazione su più tablet di diversa risoluzione.

    Nel mio manifest ho dichiarato questa activity di seguito insieme a tutte le altre

    <activity android:name=".MainActivity" android:launchMode="singleTask" android:label="@string/Home" android:screenOrientation="landscape"></activity>

    Più sul main:

    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

    Sto riscontrando (e impazzendo), su un tablet diverso da quello che ho utilizzato per sviluppare la mia app , una cosa strana..
    Se faccio modifiche sul db (es. cancellazione di un dato, aggiunta di un record, ed ecc..)in altre activity quando torno al main lo ricrea e poi cresha.

    Come è possibile se nel manifest c'è " android:launchMode="singleTask" "?
    Grazie
    Ciao, immagino che hai utilizzato una classe SQLiteAdapter, che istanzia anche un oggetto SQLiteHelper.
    A che punto del codice esegui la creazione/gestione del db sqlite?
    Il logcat che riporta al crash?
    Quando richiami il metodo .openDatabase erroneamente, il metodo crea un db vuoto e se il file xxx.sqlite già esiste sul device, questo potrebbe essere la causa del crash
    Ultima modifica di frank17next; 20-03-12 alle 22:43
    Nexus 6 - 5.0.1 Stock
    Nexus 5 - 5.0.1 Stock + Root
    Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

  6. #5
    Androidiano


    Registrato dal
    Nov 2011
    Località
    Ivrea
    Messaggi
    133

    Ringraziamenti
    7
    Ringraziato 8 volte in 8 Posts
    Predefinito

    Quote Originariamente inviato da frank17next Visualizza il messaggio
    Ciao, immagino che hai utilizzato una classe SQLiteAdapter, che istanzia anche un oggetto SQLiteHelper.
    A che punto del codice esegui la creazione/gestione del db sqlite?
    Il logcat che riporta al crash?
    Quando richiami il metodo .openDatabase erroneamente, il metodo crea un db vuoto e se il file xxx.sqlite già esiste sul device, questo potrebbe essere la causa del crash
    Umh.. mi sembra un'idea. Però io disinstallo e reinstallo l'applicazione ogni volta per testarlo. Dici che può essere che si tiene il db da qualche parte? su gli altri tablet non succede ma se dici che può capitare può essere..

    La creazione del db avviene dopo il login, quindi prima del main.
    Di seguito la classe:

    public class DatabaseHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "miodb.db";
    private static final String DATABASE_PATH = "/data/data/it.miodb.android.miaapp/databases/";

    private static final int SCHEMA_VERSION = 2;

    public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, SCHEMA_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase sqlDB) {
    try {
    createUsersTable(sqlDB);
    .........

    } catch (Exception e) {
    e.printStackTrace();
    }
    }

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

    }
    ...........
    }

    La creazione avviene all'installazione dell'app e poi finche l'applicazione non viene disinstallata non lo ricrea più.
    Visto che questo (maledetto) tablet non viene visto da eclipse pur mettendo il debug usb, non posso allegare il logcat.
    Anzi se hai idee a riguardo.. Mi ha detto un mio amico del forum che su alcuni tablet cinesi non funge il debug.

  7. #6
    Senior Droid L'avatar di frank17next


    Registrato dal
    Jan 2010
    Località
    Campobasso
    Messaggi
    739
    Smartphone
    GNexus, Galaxy Note, GT 10.1

    Ringraziamenti
    16
    Ringraziato 143 volte in 102 Posts
    Predefinito

    Mi è parso di capire che crei il database alla prima esecuzione dell'installazione. Il mio caso era un pò diverso ma simile.
    Io dovevo utilizzare un db.sqlite preesistente, che ho creato 'all'esterno' di eclipse (con sqlite database browser, un ottimo tools per linux), copiato nell'assets del progetto e che veniva copiato sul device soltanto se una mia funzione, checkDataBase, ne verificava la presenza e tornava un false.
    In particolare, nella classe SQLiteAdapter ho evitato di sfruttare onCreate e OnUpgrade, perchè inevitabilmente la copia dall'assets falliva, visto che l'istanziamento della classe mi creava un db vuoto sul device e successivamente falliva la 'copia' (che in questo caso si trasformava in una sovrascrittura) sul device.
    Ho quindi risolto con uno sporco trucco di programmazione:
    1) Quando istanzio SQLiteAdapter non faccio nulla (non creo db, alloco solo l'oggetto). Quindi onCreate e OnUpgrade li lascio vuoti.
    2) prima del richiamo del metodo 'getReadableDatabase' o getWritableDatabase' (che creano un dbvuoto se sul device manca<- hot) eseguo un checkDb per controllare la sua esistenza sul device. se non c'è (equivalente al controllo dell'onCreate) lo copia altrimenti utilizza quello che già è presente:
    codice:
    public void copyDatabase() throws IOException {
    	  if (controlloEsistenzaDb()) {
    	  }else{
    		InputStream assetsDB = context.getAssets().open("dbtest.db");
    	    OutputStream dbOut = new FileOutputStream("/data/data/mia.applicazione.test/sqliteAndroid.db");
    	    byte[] buffer = new byte[1024];
    	    int length;
    	    while ((length = assetsDB.read(buffer))>0){
    	      dbOut.write(buffer, 0, length);
    	    }	 
    	    dbOut.flush();
    	    dbOut.close();
    	    assetsDB.close();
    	  }
    	}
    codice:
      public boolean controlloEsistenzaDb()  {
      File dbFile = new File(DB_PATH + MYDATABASE_NAME);
      return dbFile.exists();
        }
    Nexus 6 - 5.0.1 Stock
    Nexus 5 - 5.0.1 Stock + Root
    Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

  8. #7
    Androidiano


    Registrato dal
    Nov 2011
    Località
    Ivrea
    Messaggi
    133

    Ringraziamenti
    7
    Ringraziato 8 volte in 8 Posts
    Predefinito

    Grazie, sono dei buoni consigli e posso testarli..
    L’unica cosa, che tutto questo non risolverebbe e non spiegherebbe il fatto
    che l’istruzione lunchMode=singleTask viene ignorata..
    Già a me sembra così strano che solo su questo tablet ignora l’istruzione, inoltre non lo fa neanche sempre..

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy