Mon application Android ayant plusieurs activités, mon problème est maintenant impossible à trouver.
Une activité a un recycleur Visualisez qu'elle récupère les données de la base de données locale, si je clique sur les éléments, elle ouvrira l'activité B, ce même flux en continu, puis l'application se bloquant (comme ouvrir l'activité B, revenir à l'activité A et ouvrir à nouveau l'activité B - jusqu'à 5 à 6 fois faire la même action puis l'application se bloque)
Le message d'erreur est lié à SQLite
DATABASE mais ne parvient pas à trouver où il se produit. S'il vous plaît, aidez-moi ... passez déjà plus de temps pour cela ...
Remarque: ouvrir DB sur Oncreate et Fermer DB sur OnDestroy dans les deux activités
Message d'erreur
E/SQLiteQuery: exception: unable to open database file (code 14); query: SELECT DISTINCT * FROM parameters WHERE inspection_no LIKE '%TEST-123%'
E/InputChannel-JNI: Error 24 dup channel fd 1023.
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.testapp.testprocess, PID: 13078
java.lang.RuntimeException: Could not read input channel file descriptors from parcel.
at android.view.InputChannel.nativeReadFromParcel(Native Method)
at android.view.InputChannel.readFromParcel(InputChannel.java:148)
at android.view.IWindowSession$Stub$Proxy.addToDisplay(IWindowSession.java:841)
at android.view.ViewRootImpl.setView(ViewRootImpl.java:640)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:342)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:94)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3518)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2733)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1478)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6121)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
3 réponses
Cette erreur se produit généralement lorsque vous oubliez de fermer la base de données. essayez de fermer le curseur et la base de données après la transaction.
Essayez d'utiliser le modèle Singleton et accédez à l'aide de db = DatabaseHelper.getInstance (context). Cela garantit qu'un seul assistant de base de données existera tout au long du cycle de vie de l'application.
public class DatabaseHelper extends SQLiteOpenHelper {
private static DatabaseHelper sInstance;
private static final String DATABASE_NAME = "database_name";
private static final String DATABASE_TABLE = "table_name";
private static final int DATABASE_VERSION = 1;
public static synchronized DatabaseHelper getInstance(Context context) {
// Use the application context, which will ensure that you
// don't accidentally leak an Activity's context.
if (sInstance == null) {
sInstance = new DatabaseHelper(context.getApplicationContext());
}
return sInstance;
}
/**
* Constructor should be private to prevent direct instantiation.
* make call to static method "getInstance()" instead.
*/
private DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
}
Chaque fois que nous accédons à la base de données ou la mettons à jour, nous devrions avoir à ouvrir et fermer la base de données une fois l'opération effectuée. regarde.
DataBaseHelper db = new DataBaseHelper(this);
db.open();
Cursor cursor = db.getAllItems();
maxCount = cursor.getCount();
Random gen = new Random();
row = gen.nextInt(maxCount);
if (cursor.moveToPosition(row)) {
String myString = cursor.getString(1);
}
cursor.close();
db.close();
Voici getAllItems()
qui retournera des articles.
public Cursor getAllItems()
{
return db.query(DATABASE_TABLE, new String[] {
KEY_ROWID,
KEY_NAME
},
null,
null,
null,
null,
null);
}
Donc dans votre cas, lorsque vous cliquez sur un élément de la liste, vous devez ouvrir / fermer la base de données avec soin.
Bon codage !!
De nouvelles questions
android
Android est le système d'exploitation mobile de Google, utilisé pour la programmation ou le développement d'appareils numériques (Smartphones, tablettes, automobiles, téléviseurs, Wear, Glass, IoT). Pour les sujets liés à Android, utilisez des balises spécifiques à Android telles que l'intention d'Android, l'activité d'Android, l'adaptateur Android, etc. Pour les questions autres que le développement ou la programmation, mais liées au cadre Android, utilisez ce lien: https: // android.stackexchange.com.