2017-07-28 11 views
-1

私は自分のアプリケーションを閉じたときに、私は次のエラーを取得しています:のAndroidのJava - 活性を破壊することができません:はIndexOutOfBoundsException

FATAL EXCEPTION: main 
    Process: uk.cal.codename.projectnedry, PID: 24450 
    java.lang.RuntimeException: Unable to destroy activity {uk.cal.codename.projectnedry/uk.CompanyScope.CompanyNavigationActivity.CompanyNavigationActivity}: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
     at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4203) 
     at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4221) 
     at android.app.ActivityThread.-wrap6(ActivityThread.java) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1538) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:154) 
     at android.app.ActivityThread.main(ActivityThread.java:6119) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
    Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
     at java.util.ArrayList.set(ArrayList.java:427) 
     at android.support.v4.app.FragmentManagerImpl.makeInactive(FragmentManager.java:1662) 
     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1452) 
     at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528) 
     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595) 
     at android.support.v4.app.FragmentManagerImpl.dispatchDestroy(FragmentManager.java:2951) 
     at android.support.v4.app.FragmentController.dispatchDestroy(FragmentController.java:271) 
     at android.support.v4.app.FragmentActivity.onDestroy(FragmentActivity.java:390) 
     at android.support.v7.app.AppCompatActivity.onDestroy(AppCompatActivity.java:209) 
     at uk.genericmodelviewpresenter.GenericMvpActivity.onDestroy(GenericMvpActivity.java:96) 
     at uk.CompanyScope.CompanyNavigationActivity.CompanyNavigationActivity.onDestroy(CompanyNavigationActivity.java:523) 
     at android.app.Activity.performDestroy(Activity.java:6881) 
     at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1153) 
     at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4190) 
     at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4221)  
     at android.app.ActivityThread.-wrap6(ActivityThread.java)  
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1538)  
     at android.os.Handler.dispatchMessage(Handler.java:102)  
     at android.os.Looper.loop(Looper.java:154)  
     at android.app.ActivityThread.main(ActivityThread.java:6119)  
     at java.lang.reflect.Method.invoke(Native Method)  
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)  
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)  

私が書いたコードに触れる部分だけは、次のとおりです。

CompanyNavigationActivity:

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    getSpecificImpOfGenericPresenter().closeRealm(); 
} 

とそのスーパークラスGenericMvpActivity:

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    //Unbind Butterknife bindings 
    if(mUnbinder!=null) { 
     mUnbinder.unbind(); 
    } 
} 

スタックトレースを見ると、これは断片的なものですが、これはAndroidコード内にあります。このCompanyNavigationActivityには、多くのフラグメントが含まれていますが、作成されたかどうかにかかわらずエラーが発生します()。

原因は何ですか?

EDIT 1

プレゼンタクラスのcloseRealm方法は、単にリスナーを除去し、レルムのプレゼンターのインスタンスを閉じます。

public void closeRealm() { 
    this.mRealmDatabase.getInstance().removeAllChangeListeners(); 
    this.mRealmDatabase.close(); 
} 

EDIT 2

さらにそれをテストする際に、私はこのエラー私CompanyNavigationActivityにviewpager内に保持された断片を作成した場合が発生しないようです。それは、その活動内に断片が存在しない場合にのみ起こると思われる。

EDIT 3

私は、フォアグラウンドサービスを開始している特定の方法、それを絞られています。具体的には、startService呼び出しです。

 /** 
    * If foreground location service is not running, start it 
    */ 
    private void startLocationService() { 
     if (!ForegroundLocationService.IS_SERVICE_RUNNING) { 
      Intent service = new Intent(getSpecificImpOfGenericView().getApplicationContext(), ForegroundLocationService.class); 
      service.setAction(ServiceConstants.ACTION.STARTFOREGROUND_ACTION); 
      ForegroundLocationService.IS_SERVICE_RUNNING = true; 
      getSpecificImpOfGenericView().getApplicationContext().startService(service); 
     } 
    } 

きっとフォアグラウンド要求は、別のサービスとして、フォアグラウンドに残って、それらを開始した活動の破壊に影響を与えるべきではありませんか?

+0

CompanyNavigationActivity.java '上のものです:523' –

+0

エラーがである** getSpecificImpOfGenericPresenter()closeRealm(); ** –

+0

エラーが** super.onDestroy()で発生; **これを何@Calco – Calco

答えて

2

super.onDestroy(); インスタンス固有のリソースが依存している可能性のあるスーパークラスリソースを破棄する前に、まずインスタンス固有のリソースを破棄してください。

+0

私はあなたの助言に従ってきましたが、これは現在の問題を解決するものではありません – Calco

関連する問題