diff options
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/io/qstandardpaths_android.cpp | 4 | ||||
-rw-r--r-- | src/corelib/kernel/qjni.cpp | 9 | ||||
-rw-r--r-- | src/corelib/kernel/qjni_p.h | 8 |
3 files changed, 17 insertions, 4 deletions
diff --git a/src/corelib/io/qstandardpaths_android.cpp b/src/corelib/io/qstandardpaths_android.cpp index 958b4ea486..50cba3135e 100644 --- a/src/corelib/io/qstandardpaths_android.cpp +++ b/src/corelib/io/qstandardpaths_android.cpp @@ -57,7 +57,7 @@ static QJNIObjectPrivate applicationContext() if (appCtx.isValid()) return appCtx; - QJNIObjectPrivate activity = QtAndroidPrivate::activity(); + QJNIObjectPrivate activity(QtAndroidPrivate::activity()); if (!activity.isValid()) return appCtx; @@ -131,7 +131,7 @@ static QString getExternalFilesDir(const char *directoryField = 0) if (!path.isEmpty()) return path; - QJNIObjectPrivate activity = QtAndroidPrivate::activity(); + QJNIObjectPrivate activity(QtAndroidPrivate::activity()); if (!activity.isValid()) return QString(); diff --git a/src/corelib/kernel/qjni.cpp b/src/corelib/kernel/qjni.cpp index 9d74fd69de..8431ee3b67 100644 --- a/src/corelib/kernel/qjni.cpp +++ b/src/corelib/kernel/qjni.cpp @@ -96,7 +96,7 @@ static jclass loadClassDotEnc(const QString &classDotEnc, JNIEnv *env) if (clazz != 0 || isCached) return clazz; - QJNIObjectPrivate classLoader = QtAndroidPrivate::classLoader(); + QJNIObjectPrivate classLoader(QtAndroidPrivate::classLoader()); if (!classLoader.isValid()) return 0; @@ -2239,6 +2239,13 @@ bool QJNIObjectPrivate::isValid() const return d->m_jobject; } +QJNIObjectPrivate QJNIObjectPrivate::fromLocalRef(jobject lref) +{ + QJNIObjectPrivate o(lref); + QJNIEnvironmentPrivate()->DeleteLocalRef(lref); + return o; +} + bool QJNIObjectPrivate::isSameObject(jobject obj) const { QJNIEnvironmentPrivate env; diff --git a/src/corelib/kernel/qjni_p.h b/src/corelib/kernel/qjni_p.h index 5f573624c6..fb1982dc74 100644 --- a/src/corelib/kernel/qjni_p.h +++ b/src/corelib/kernel/qjni_p.h @@ -84,7 +84,10 @@ public: QJNIObjectPrivate(const char *className, const char *sig, ...); explicit QJNIObjectPrivate(jclass clazz); QJNIObjectPrivate(jclass clazz, const char *sig, ...); - QJNIObjectPrivate(jobject obj); + // In most cases you should never call this function with a local ref. unless you intend + // to manage the local ref. yourself. + // NOTE: see fromLocalRef() for converting a local ref. to QJNIObjectPrivate. + explicit QJNIObjectPrivate(jobject globalRef); template <typename T> T callMethod(const char *methodName, @@ -183,6 +186,9 @@ public: return *this; } + // This function takes ownership of the jobject and releases the local ref. before returning. + static QJNIObjectPrivate fromLocalRef(jobject lref); + private: friend class QAndroidJniObject; |