<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic com.esri.arcgisruntime.ArcGISRuntimeException: Geodatabase is closed in ArcGIS Runtime SDK for Android Questions</title>
    <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/com-esri-arcgisruntime-arcgisruntimeexception/m-p/1092642#M5599</link>
    <description>&lt;P&gt;&lt;STRONG&gt;I am getting Geodatabase is closed error.&amp;nbsp; Below are callstack of error :-&lt;/STRONG&gt;&lt;/P&gt;&lt;P class="p1"&gt;com.esri.arcgisruntime.ArcGISRuntimeException: Geodatabase is closed.&lt;/P&gt;&lt;P class="p1"&gt;at com.esri.arcgisruntime.internal.jni.CoreFeatureQueryResult.nativeIterator(Native Method)&lt;/P&gt;&lt;P class="p1"&gt;at com.esri.arcgisruntime.internal.jni.CoreFeatureQueryResult.g(SourceFile:1)&lt;/P&gt;&lt;P class="p1"&gt;at com.esri.arcgisruntime.data.FeatureQueryResult.iterator(SourceFile:4)&lt;/P&gt;&lt;P class="p1"&gt;at aqmddev.aqmd.gov.scaqmdmobile.viewmodel.BaseViewModel.argGISService$lambda-4(BaseViewModel.kt:167)&lt;/P&gt;&lt;P class="p1"&gt;at aqmddev.aqmd.gov.scaqmdmobile.viewmodel.BaseViewModel.$r8$lambda$DUDWFHLmsJ9MT2R8rukbngwex7g(Unknown Source:0)&lt;/P&gt;&lt;P class="p1"&gt;at aqmddev.aqmd.gov.scaqmdmobile.viewmodel.BaseViewModel$$ExternalSyntheticLambda0.run(Unknown Source:4)&lt;/P&gt;&lt;P class="p1"&gt;at android.os.Handler.handleCallback(Handler.java:938)&lt;/P&gt;&lt;P class="p1"&gt;at android.os.Handler.dispatchMessage(Handler.java:99)&lt;/P&gt;&lt;P class="p1"&gt;at android.os.Looper.loop(Looper.java:223)&lt;/P&gt;&lt;P class="p1"&gt;at android.app.ActivityThread.main(ActivityThread.java:7656)&lt;/P&gt;&lt;P class="p1"&gt;at java.lang.reflect.Method.invoke(Native Method)&lt;/P&gt;&lt;P class="p1"&gt;at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)&lt;/P&gt;&lt;P class="p1"&gt;at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)&lt;/P&gt;&lt;P class="p1"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;&lt;STRONG&gt;Here is my source code :-&lt;/STRONG&gt;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;protected fun &lt;/SPAN&gt;&lt;SPAN&gt;argGISService&lt;/SPAN&gt;(params: QueryParameters&lt;SPAN&gt;, &lt;/SPAN&gt;url: String&lt;SPAN&gt;, &lt;/SPAN&gt;response: (Int&lt;SPAN&gt;, &lt;/SPAN&gt;feature: Set&amp;lt;Feature&amp;gt;?) -&amp;gt; Unit){&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;{&lt;BR /&gt;    &lt;SPAN&gt;// set all outfields&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;val &lt;/SPAN&gt;outFields = &lt;SPAN&gt;arrayListOf&lt;/SPAN&gt;&amp;lt;String&amp;gt;()&lt;BR /&gt;    outFields.add(&lt;SPAN&gt;"*"&lt;/SPAN&gt;)&lt;BR /&gt;    params.&lt;SPAN&gt;isReturnGeometry &lt;/SPAN&gt;= &lt;SPAN&gt;true&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;mServiceFeatureTable &lt;/SPAN&gt;= ServiceFeatureTable(url)&lt;BR /&gt;    &lt;SPAN&gt;mServiceFeatureTable&lt;/SPAN&gt;!!.&lt;SPAN&gt;featureRequestMode &lt;/SPAN&gt;= ServiceFeatureTable.FeatureRequestMode.&lt;SPAN&gt;MANUAL_CACHE&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;//populate the table based on the query, listen for result in a listenable future&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    //query feature from the table&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;val &lt;/SPAN&gt;future  = &lt;SPAN&gt;mServiceFeatureTable&lt;/SPAN&gt;!!.populateFromServiceAsync(params&lt;SPAN&gt;, true, &lt;/SPAN&gt;outFields)&lt;BR /&gt;&lt;BR /&gt;    future.addDoneListener &lt;SPAN&gt;{&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;try &lt;/SPAN&gt;{&lt;BR /&gt;            &lt;SPAN&gt;//call get on the future to get the result&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;val &lt;/SPAN&gt;result = future.get()&lt;BR /&gt;            &lt;SPAN&gt;val &lt;/SPAN&gt;features = result.iterator().&lt;SPAN&gt;asSequence&lt;/SPAN&gt;().&lt;SPAN&gt;toSet&lt;/SPAN&gt;()&lt;BR /&gt;&lt;BR /&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;(features != &lt;SPAN&gt;null &lt;/SPAN&gt;&amp;amp;&amp;amp; !features.&lt;SPAN&gt;isNullOrEmpty&lt;/SPAN&gt;()) {&lt;BR /&gt;                response(features.&lt;SPAN&gt;count&lt;/SPAN&gt;()&lt;SPAN&gt;, &lt;/SPAN&gt;features)&lt;BR /&gt;            }&lt;SPAN&gt;else&lt;/SPAN&gt;{&lt;BR /&gt;                response(&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;, null&lt;/SPAN&gt;)&lt;BR /&gt;            }&lt;BR /&gt;        }&lt;SPAN&gt;catch &lt;/SPAN&gt;(e: Exception) {&lt;BR /&gt;            response(&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;, null&lt;/SPAN&gt;)&lt;BR /&gt;            LogUtils.e(&lt;SPAN&gt;"BaseFragment"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Populate from service failed 2: " &lt;/SPAN&gt;+ e.printStackTrace())&lt;BR /&gt;&lt;BR /&gt;        }&lt;SPAN&gt;catch &lt;/SPAN&gt;(ex: RuntimeException){&lt;BR /&gt;            LogUtils.e(&lt;SPAN&gt;"BaseFragment"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"runtime execptionPopulate from service failed 2: " &lt;/SPAN&gt;+ ex.printStackTrace())&lt;BR /&gt;            ex.printStackTrace()&lt;BR /&gt;            response(&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;, null&lt;/SPAN&gt;)&lt;BR /&gt;        }&lt;BR /&gt;    &lt;SPAN&gt;}&lt;BR /&gt;&lt;/SPAN&gt;    }&lt;SPAN&gt;catch &lt;/SPAN&gt;(e1: Exception){&lt;BR /&gt;        e1.printStackTrace()&lt;BR /&gt;        response(&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;, null&lt;/SPAN&gt;)&lt;BR /&gt;    }&lt;SPAN&gt;catch &lt;/SPAN&gt;(ex2: RuntimeException){&lt;BR /&gt;        ex2.printStackTrace()&lt;BR /&gt;        response(&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;, null&lt;/SPAN&gt;)&lt;BR /&gt;    }&lt;BR /&gt;}&lt;/PRE&gt;&lt;P class="p1"&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 26 Aug 2021 10:08:49 GMT</pubDate>
    <dc:creator>AnkitKamboj</dc:creator>
    <dc:date>2021-08-26T10:08:49Z</dc:date>
    <item>
      <title>com.esri.arcgisruntime.ArcGISRuntimeException: Geodatabase is closed</title>
      <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/com-esri-arcgisruntime-arcgisruntimeexception/m-p/1092642#M5599</link>
      <description>&lt;P&gt;&lt;STRONG&gt;I am getting Geodatabase is closed error.&amp;nbsp; Below are callstack of error :-&lt;/STRONG&gt;&lt;/P&gt;&lt;P class="p1"&gt;com.esri.arcgisruntime.ArcGISRuntimeException: Geodatabase is closed.&lt;/P&gt;&lt;P class="p1"&gt;at com.esri.arcgisruntime.internal.jni.CoreFeatureQueryResult.nativeIterator(Native Method)&lt;/P&gt;&lt;P class="p1"&gt;at com.esri.arcgisruntime.internal.jni.CoreFeatureQueryResult.g(SourceFile:1)&lt;/P&gt;&lt;P class="p1"&gt;at com.esri.arcgisruntime.data.FeatureQueryResult.iterator(SourceFile:4)&lt;/P&gt;&lt;P class="p1"&gt;at aqmddev.aqmd.gov.scaqmdmobile.viewmodel.BaseViewModel.argGISService$lambda-4(BaseViewModel.kt:167)&lt;/P&gt;&lt;P class="p1"&gt;at aqmddev.aqmd.gov.scaqmdmobile.viewmodel.BaseViewModel.$r8$lambda$DUDWFHLmsJ9MT2R8rukbngwex7g(Unknown Source:0)&lt;/P&gt;&lt;P class="p1"&gt;at aqmddev.aqmd.gov.scaqmdmobile.viewmodel.BaseViewModel$$ExternalSyntheticLambda0.run(Unknown Source:4)&lt;/P&gt;&lt;P class="p1"&gt;at android.os.Handler.handleCallback(Handler.java:938)&lt;/P&gt;&lt;P class="p1"&gt;at android.os.Handler.dispatchMessage(Handler.java:99)&lt;/P&gt;&lt;P class="p1"&gt;at android.os.Looper.loop(Looper.java:223)&lt;/P&gt;&lt;P class="p1"&gt;at android.app.ActivityThread.main(ActivityThread.java:7656)&lt;/P&gt;&lt;P class="p1"&gt;at java.lang.reflect.Method.invoke(Native Method)&lt;/P&gt;&lt;P class="p1"&gt;at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)&lt;/P&gt;&lt;P class="p1"&gt;at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)&lt;/P&gt;&lt;P class="p1"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;&lt;STRONG&gt;Here is my source code :-&lt;/STRONG&gt;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;protected fun &lt;/SPAN&gt;&lt;SPAN&gt;argGISService&lt;/SPAN&gt;(params: QueryParameters&lt;SPAN&gt;, &lt;/SPAN&gt;url: String&lt;SPAN&gt;, &lt;/SPAN&gt;response: (Int&lt;SPAN&gt;, &lt;/SPAN&gt;feature: Set&amp;lt;Feature&amp;gt;?) -&amp;gt; Unit){&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;{&lt;BR /&gt;    &lt;SPAN&gt;// set all outfields&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;val &lt;/SPAN&gt;outFields = &lt;SPAN&gt;arrayListOf&lt;/SPAN&gt;&amp;lt;String&amp;gt;()&lt;BR /&gt;    outFields.add(&lt;SPAN&gt;"*"&lt;/SPAN&gt;)&lt;BR /&gt;    params.&lt;SPAN&gt;isReturnGeometry &lt;/SPAN&gt;= &lt;SPAN&gt;true&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;mServiceFeatureTable &lt;/SPAN&gt;= ServiceFeatureTable(url)&lt;BR /&gt;    &lt;SPAN&gt;mServiceFeatureTable&lt;/SPAN&gt;!!.&lt;SPAN&gt;featureRequestMode &lt;/SPAN&gt;= ServiceFeatureTable.FeatureRequestMode.&lt;SPAN&gt;MANUAL_CACHE&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;//populate the table based on the query, listen for result in a listenable future&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    //query feature from the table&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    &lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;val &lt;/SPAN&gt;future  = &lt;SPAN&gt;mServiceFeatureTable&lt;/SPAN&gt;!!.populateFromServiceAsync(params&lt;SPAN&gt;, true, &lt;/SPAN&gt;outFields)&lt;BR /&gt;&lt;BR /&gt;    future.addDoneListener &lt;SPAN&gt;{&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;try &lt;/SPAN&gt;{&lt;BR /&gt;            &lt;SPAN&gt;//call get on the future to get the result&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;val &lt;/SPAN&gt;result = future.get()&lt;BR /&gt;            &lt;SPAN&gt;val &lt;/SPAN&gt;features = result.iterator().&lt;SPAN&gt;asSequence&lt;/SPAN&gt;().&lt;SPAN&gt;toSet&lt;/SPAN&gt;()&lt;BR /&gt;&lt;BR /&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;(features != &lt;SPAN&gt;null &lt;/SPAN&gt;&amp;amp;&amp;amp; !features.&lt;SPAN&gt;isNullOrEmpty&lt;/SPAN&gt;()) {&lt;BR /&gt;                response(features.&lt;SPAN&gt;count&lt;/SPAN&gt;()&lt;SPAN&gt;, &lt;/SPAN&gt;features)&lt;BR /&gt;            }&lt;SPAN&gt;else&lt;/SPAN&gt;{&lt;BR /&gt;                response(&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;, null&lt;/SPAN&gt;)&lt;BR /&gt;            }&lt;BR /&gt;        }&lt;SPAN&gt;catch &lt;/SPAN&gt;(e: Exception) {&lt;BR /&gt;            response(&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;, null&lt;/SPAN&gt;)&lt;BR /&gt;            LogUtils.e(&lt;SPAN&gt;"BaseFragment"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"Populate from service failed 2: " &lt;/SPAN&gt;+ e.printStackTrace())&lt;BR /&gt;&lt;BR /&gt;        }&lt;SPAN&gt;catch &lt;/SPAN&gt;(ex: RuntimeException){&lt;BR /&gt;            LogUtils.e(&lt;SPAN&gt;"BaseFragment"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"runtime execptionPopulate from service failed 2: " &lt;/SPAN&gt;+ ex.printStackTrace())&lt;BR /&gt;            ex.printStackTrace()&lt;BR /&gt;            response(&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;, null&lt;/SPAN&gt;)&lt;BR /&gt;        }&lt;BR /&gt;    &lt;SPAN&gt;}&lt;BR /&gt;&lt;/SPAN&gt;    }&lt;SPAN&gt;catch &lt;/SPAN&gt;(e1: Exception){&lt;BR /&gt;        e1.printStackTrace()&lt;BR /&gt;        response(&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;, null&lt;/SPAN&gt;)&lt;BR /&gt;    }&lt;SPAN&gt;catch &lt;/SPAN&gt;(ex2: RuntimeException){&lt;BR /&gt;        ex2.printStackTrace()&lt;BR /&gt;        response(&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;, null&lt;/SPAN&gt;)&lt;BR /&gt;    }&lt;BR /&gt;}&lt;/PRE&gt;&lt;P class="p1"&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 26 Aug 2021 10:08:49 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/com-esri-arcgisruntime-arcgisruntimeexception/m-p/1092642#M5599</guid>
      <dc:creator>AnkitKamboj</dc:creator>
      <dc:date>2021-08-26T10:08:49Z</dc:date>
    </item>
    <item>
      <title>Re: com.esri.arcgisruntime.ArcGISRuntimeException: Geodatabase is closed</title>
      <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/com-esri-arcgisruntime-arcgisruntimeexception/m-p/1093451#M5600</link>
      <description>&lt;P&gt;Hi Ankit,&lt;/P&gt;&lt;P&gt;We have seen this error internally and it can happen when the ServiceFeatureTable goes out of scope/garbage collected on runtime platforms like android which is aggressive with garbage collection. When the SFT is disposed via garbage collection, the underlying geodatabase connection is also closed.&lt;/P&gt;&lt;P&gt;We fixed it for next release by making the FeatureQueryResult hold strong reference of ServiceFeatureTable and there by avoiding it being garbage collected easily.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Currently we can make sure that ServiceFeatureTable instance is not garbage collected at the app level, by keeping a reference of ServiceFeatureTable within the future done listener of the populate method (ex: call any property on SFT like name etc.) or making the SFT and FeatureQueryResult class variables.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;P&gt;Rama&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 30 Aug 2021 04:43:27 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/com-esri-arcgisruntime-arcgisruntimeexception/m-p/1093451#M5600</guid>
      <dc:creator>RamaChintapalli</dc:creator>
      <dc:date>2021-08-30T04:43:27Z</dc:date>
    </item>
  </channel>
</rss>

