无法紧凑的境界。 Realm.getInstance在LG G5上崩溃我的应用程序

问题描述 投票:1回答:1

尝试运行以下REALM代码时出现此错误。为什么会这样?

码:

  public static void deleteRealm(Context context) {
    Realm realm = Realm.getInstance(PSApplicationClass.Config);
    try {
        Log.i("", "realm start");
        realm.executeTransaction(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {
                realm.delete(Destination.class);
                realm.delete(TripStep.class);
                realm.delete(TripStop.class);
                realm.delete(Route.class);
                realm.delete(RealmLocation.class);
                realm.delete(PSTrip.class);
                realm.delete(PSUser.class);
                realm.delete(UserVehicle.class);
                realm.delete(Vehicle.class);
                realm.delete(MileageRates.class);
                realm.delete(PSUserActivityMonth.class);
                realm.delete(PSUserActivityWeek.class);
                realm.delete(PSUserActivityYear.class);
                realm.delete(Activity.class);
                realm.delete(PSTripsStats.class);
            }
        });
        realm.close();
        RealmManager.closeInstance();
        try {
            boolean compact = Realm.compactRealm(PSApplicationClass.Config);
            Log.i("", "GLOBAL realm end: " + compact);
        }catch (Exception e){
            Utils.appendLog("Error trying to compact realm","E", Constants.OTHER);
        }
    } catch (Exception e) {
        Log.i("", "realm continue initTrip error trying to add to realm:" + e.getMessage());
        if (realm.isInTransaction()) {
            realm.cancelTransaction();
        }
    }
}

错误:

01-02 11:12:40.352: E/AndroidRuntime(18999): Process: nl.hgrams.passenger, PID: 18999
01-02 11:12:40.352: E/AndroidRuntime(18999): io.realm.exceptions.RealmFileException: Unable to open a realm at path '/data/data/nl.hgrams.passenger/files/myrealm.realm.management': make_dir() failed: No such file or directory. (make_dir() failed: No such file or directory) (/data/data/nl.hgrams.passenger/files/myrealm.realm.management) in /home/cc/repo/realm/release/realm/realm-library/src/main/cpp/io_realm_internal_SharedRealm.cpp line 217 Kind: ACCESS_ERROR.
01-02 11:12:40.352: E/AndroidRuntime(18999):    at io.realm.internal.SharedRealm.nativeGetSharedRealm(Native Method)
01-02 11:12:40.352: E/AndroidRuntime(18999):    at io.realm.internal.SharedRealm.<init>(SharedRealm.java:192)
01-02 11:12:40.352: E/AndroidRuntime(18999):    at io.realm.internal.SharedRealm.getInstance(SharedRealm.java:240)
01-02 11:12:40.352: E/AndroidRuntime(18999):    at io.realm.internal.SharedRealm.getInstance(SharedRealm.java:208)
01-02 11:12:40.352: E/AndroidRuntime(18999):    at io.realm.RealmCache.doCreateRealmOrGetFromCache(RealmCache.java:297)
01-02 11:12:40.352: E/AndroidRuntime(18999):    at io.realm.RealmCache.createRealmOrGetFromCache(RealmCache.java:283)
01-02 11:12:40.352: E/AndroidRuntime(18999):    at io.realm.Realm.getInstance(Realm.java:291)

这发生在Realm realm = Realm.getInstance(PSApplicationClass.Config);

这不会发生在Le Eco Le 2 Pro或Nexus 5上,但它确实发生在我的LG G5上。我压缩的方式有问题吗? (这里还没有达到紧凑的代码,所以我不知道这可能是怎么回事。

android database file realm
1个回答
1
投票

经过更多的测试和反复试验,我发现了这个问题。在Logout上,我正在删除数据目录的上下文。所以对于API> N的手机会崩溃:

   int currentapiVersion = android.os.Build.VERSION.SDK_INT;
    if (currentapiVersion >= android.os.Build.VERSION_CODES.N) {
        FileUtils.deleteQuietly(context.getDataDir());
    }
© www.soinside.com 2019 - 2024. All rights reserved.