标签: illegalstateexception

Android - 由于IllegalStateException导致无法在完成后销毁活动:在onSaveInstanceState之后无法执行此操作

我的应用中有3个片段的活动.当按下第一个按钮时,会在Activity中调用一个方法,该方法执行一些不相关的操作然后调用finish().

这会触发onPause()片段,它会执行更多不相关的内容然后调用super.onPause().

然后,应用程序加载它出现的旧Activity(逻辑上跟随视图堆栈),并onDestroyView()在Fragment上调用时突然崩溃并出现以下异常:

FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to destroy activity {be.niteowl.niteowl.debug/be.niteowl.niteowl.views.activities.VenueActivity}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2793)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:2811)
at android.app.ActivityThread.access$2100(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:972)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3835)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1327)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1338)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
at be.niteowl.niteowl.views.activities.TrackFragment.onDestroyView(TrackFragment.java:161)
at android.support.v4.app.Fragment.performDestroyView(Fragment.java:1665)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:980)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) …
Run Code Online (Sandbox Code Playgroud)

android ondestroy illegalstateexception android-fragments supportmapfragment

16
推荐指数
2
解决办法
2万
查看次数

IllegalStateException:Fragment <ThisFragment>当前不在FragmentManager中

我无法在我的应用中跟踪崩溃的原因.我有一个片段显示一个ListView,我也有SlidingMenu一个搜索字段.当我搜索时,ListView根据搜索结果重新填充项目.现在,当我尝试ListView从新填充的结果中打开一个项目时,我的应用程序崩溃了.

此处触发异常:

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    getSupportFragmentManager().putFragment(outState, "mContent", mContent); //Exception made here
}
Run Code Online (Sandbox Code Playgroud)

这是因为支持库吗?我该如何解决这个问题?

编辑:

这是堆栈跟踪:

02-05 12:51:53.941: E/AndroidRuntime(11638): FATAL EXCEPTION: main
02-05 12:51:53.941: E/AndroidRuntime(11638): java.lang.IllegalStateException: Fragment MyFragment{436749b0} is not currently in the FragmentManager
02-05 12:51:53.941: E/AndroidRuntime(11638):    at android.support.v4.app.FragmentManagerImpl.putFragment(FragmentManager.java:546)
02-05 12:51:53.941: E/AndroidRuntime(11638):    at com.sample.android.app.SearchListActivity.onSaveInstanceState(SearchListActivity.java:118)
02-05 12:51:53.941: E/AndroidRuntime(11638):    at android.app.Activity.performSaveInstanceState(Activity.java:1137)
02-05 12:51:53.941: E/AndroidRuntime(11638):    at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1215)
02-05 12:51:53.941: E/AndroidRuntime(11638):    at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:2972)
02-05 12:51:53.941: E/AndroidRuntime(11638):    at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3031)
02-05 12:51:53.941: E/AndroidRuntime(11638):    at android.app.ActivityThread.access$900(ActivityThread.java:138) …
Run Code Online (Sandbox Code Playgroud)

android nullpointerexception illegalstateexception android-fragments android-support-library

16
推荐指数
1
解决办法
1万
查看次数

Robolectric:IllegalStateException:您需要在此活动中使用Theme.AppCompat主题(或后代)

我是Android上Robolectric和仪器测试的新手.我按照Robolectric指南进行了第一次测试.但是我得到了:

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

我搜索了错误,但没有解决方案有帮助.我包括可能导致此错误的所有内容.

摇篮:

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt' //needed for source code generation
apply plugin: 'jacoco'
apply plugin: 'de.mobilej.unmock'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    testOptions {
        unitTests.returnDefaultValues = true
    }

    defaultConfig {
        applicationId "#######"
        minSdkVersion 15
        targetSdkVersion 22
        testHandleProfiling true
        testFunctionalTest true
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        debug{
            testCoverageEnabled false
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    lintOptions …
Run Code Online (Sandbox Code Playgroud)

java android functional-testing illegalstateexception robolectric

16
推荐指数
3
解决办法
6252
查看次数

Picasso java.lang.IllegalStateException:方法调用不应该从主线程发生

我试图用毕加索从三个Bitmap图像中获取三个图像URL

public void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState);
  setContentView(R.layout.tab2);
  Drawable d1 = new BitmapDrawable(Picasso.with(Tab2.this).load(zestimateImg1).get());
}
Run Code Online (Sandbox Code Playgroud)

我正在FATAL EXCEPTION使用此代码.我怀疑它与这应该在内部完成的事实有关AsyncTask,但我不能让它工作.如果使用这是可以避免的,我想在不使用的情况下这样做AsyncTask.

如何在不崩溃的情况下运行此代码?

如果最好的方法是AsyncTask,那么该解决方案是可以的.

android imageview android-asynctask illegalstateexception picasso

15
推荐指数
2
解决办法
2万
查看次数

android 3.x中的拖放会导致拖动后的少量数字导致illegalStateException

在Android 3.x上有拖放机制的问题:在做了一些拖动(比如30次拖动)之后会产生异常(参见附件链接)

https://groups.google.com/forum/#!msg/android-platform/2APvO248NNY/rKI-5dCT8XcJ (我在日志中收到与该帖子相同的内容..)

android技术人员在那里回答它是API中的错误,并说避免问题的唯一方法是调用垃圾收集器.

我做的.异常没有被抛出,但过了一段时间(比如更多30-40次拖动)android停止从某种原因调用drop事件.

我尝试通过释放所有资源/画布/绘图缓存/回收位图来"刷新"所有视图并重新创建它们并没有帮助(不再抛出异常 - 但仍有一些拖拽掉落事件后'工作)

"帮助"唯一的事情是关闭活动并重新启动它.

有人以某种方式解决了这个问题,或者有一个简单的替代方案??? (旁边实现我自己的拖放功能..)

我想得到解决方案,不会强迫我重新启动或重新创建任何不想要的东西..

这里是演示错误的示例代码(没有演示我在使用System.GC后对drop事件的问题所说的部分):

public class DragandDropExampleActivity extends Activity {

private boolean mIsBeenDragged = false;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final ImageView imageViewToDRag = (ImageView) findViewById(R.id.image_view_to_drag);

    imageViewToDRag.setClickable(true);

    imageViewToDRag.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                mIsBeenDragged = true;
                DragShadowBuilder shadowBuilder = new DragShadowBuilder(imageViewToDRag);
                imageViewToDRag.startDrag(null, shadowBuilder, imageViewToDRag, 0);
            } else if (event.getAction() == MotionEvent.ACTION_UP) {

                mIsBeenDragged = false; …
Run Code Online (Sandbox Code Playgroud)

android drag-and-drop view touch-event illegalstateexception

14
推荐指数
1
解决办法
1057
查看次数

尝试重新打开已经关闭的对象:java.lang.IllegalStateException:?

我知道这个问题在SO中多次提出过,但我无法弄清楚我的确切问题.

我使用以下代码从数据库(表1)获取数据,并根据检索值更新另一个Table2.它在一些Android版本中工作正常,但是当我用Android 4.0.3进行测试时.我这个迷途java.lang.IllegalStateException:?.attempt to re-open an already-closed objectsum_cursor.moveToNext();.

我在AsyncTask中使用此代码.

 /** Sum of total matched values*/
            Cursor sum_cursor = db.gettotalMatchvalue(this);
             if(sum_cursor!=null)
             {
                 sum_cursor.moveToFirst();
                 for(int j=0; j<sum_cursor.getCount();j++)
                 {    
                     float totalmatchedscore = sum_cursor.getInt(0);
                     float totalingredients = Float.parseFloat(sum_cursor.getString(sum_cursor.getColumnIndex(APPDatabase.CK_TOTALINCREDIENTS)));
                     /**average = totalscore/totalingredients*/
                     double average = totalmatchedscore/totalingredients;
                     int id = Integer.parseInt(sum_cursor.getString(sum_cursor.getColumnIndex(APPDatabase.CK_ID))); 

                 db.updateAverage(id, average); 
                 sum_cursor.moveToNext(); //Here is the problem
                 }  
             }   
             db.close();  
Run Code Online (Sandbox Code Playgroud)

我的更新方法编码

/** Update average */
public void updateAverage(int id,double average)
{
    SQLiteDatabase db = getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(CK_FINALVALUE,average); …
Run Code Online (Sandbox Code Playgroud)

android illegalstateexception android-cursor android-activity

14
推荐指数
1
解决办法
1万
查看次数

嵌套片段 - IllegalStateException"onSaveInstanceState后无法执行此操作"

背景

Android中的异步回调

尝试在Android上以可靠的方式执行异步操作是不必要的错综复杂的,即AsyncTask在概念上是否真的有缺陷,或者我只是缺少某些东西?

现在,这是在引入Fragments之前的全部内容.随着Fragments的引入,onRetainNonConfigurationInstance()已被弃用.因此,最新的Google宽恕黑客是使用持久的非UI片段,当发生配置更改时(即旋转屏幕,更改语言设置等),它会从您的Activity中附加/分离.

示例:https: //code.google.com/p/android/issues/detail?id = 23096#c4

IllegalStateException - 无法在onSaveInstanceState之后执行此操作

从理论上讲,上面的黑客可以让你绕过可怕的:

IllegalStateException - "Can not perform this action after onSaveInstanceState"
Run Code Online (Sandbox Code Playgroud)

因为持久的非UI片段将接收onViewStateRestored()(或者onResume)和onSaveInstanceState()(或者onPause)的回调.因此,您可以判断实例状态何时被保存/恢复.这是一个很简单的代码,但是利用这些知识,您可以排队异步回调,直到活动的FragmentManager在执行它们之前将其mStateSaved变量设置为false.

mStateSaved是最终负责触发此异常的变量.

private void checkStateLoss() {
    if (mStateSaved) {
        throw new IllegalStateException(
                "Can not perform this action after onSaveInstanceState");
    }
    if (mNoTransactionsBecause != null) {
        throw new IllegalStateException(
                "Can not perform this action inside of " + mNoTransactionsBecause);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以从理论上讲,现在你知道什么时候执行片段事务是安全的,因此你可以避免可怕的IllegalStateException.

错误!

嵌套片段

上面的解决方案仅适用于Activity的FragmentManager.片段本身也有一个子片段管理器,用于嵌套片段.遗憾的是,子片段管理器根本不与Activity的片段管理器保持同步.因此,虽然活动的片段管理器是最新的,并且始终具有正确的mStateSaved; 儿童片段不这么认为,并且会在不适当的时候愉快地抛出可怕的IllegalStateException.

现在,如果您查看了支持库中的Fragment.java和FragmentManager.java,您将不会感到惊讶的是,所有与片段有关的内容都容易出错.设计和代码质量是......啊,有问题.你喜欢布尔吗?

mHasMenu = false
mHidden = false
mInLayout = …
Run Code Online (Sandbox Code Playgroud)

java android illegalstateexception

14
推荐指数
1
解决办法
4847
查看次数

"java.lang.IllegalStateException:无法调用以传递结果"

我得到了这个异常:"java.lang.IllegalStateException:无法调用来传递结果",并没有立即理解为什么.以下是我为何发生这种情况的答案,也许这有助于某人.

android illegalstateexception activity-finish

14
推荐指数
1
解决办法
2587
查看次数

Grails错误:找不到线程绑定请求:您是否在引用请求属性...安装Spring Security Core之后


我刚刚创建了一个新的grails-app,
一切都很好,直到我决定
安装Spring Security Core.

安装Spring Security Core
执行s2-quickstart并点击
grails run-app后,产生了
以下错误:

URI
/test1/
Class
java.lang.IllegalStateException
Message
No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这个问题?
如果
你能提供帮助我真的很感激.我曾尝试 …

grails spring-security illegalstateexception

12
推荐指数
2
解决办法
9716
查看次数

IllegalStateException:当应用程序尝试再次显示DialogFragment时,活动已被销毁

我在stackoverflow上发现了很多类似的问题,但他们的解决方案在我的情况下不起作用.它们与onSaveInstanceState方法和支持库特别相关.

Activity在一个事件上运行此代码:

MyDialogFragment.showMyDialog(name, this, this);
Run Code Online (Sandbox Code Playgroud)

name参数是String对象.第二个参数(this)是正则Activity类对象,第三个参数(也this)是简单接口.我Activity实现了这个接口.showMyDialog()当然是静态方法.这是它的身体:

MyDialogFragment fragment = new MyDialogFragment(listener, "Hello " + name);
fragment.show(activity.getFragmentManager(), "myDialog");
Run Code Online (Sandbox Code Playgroud)

这在第一次尝试时效果很好.但是在第二天我得到了这个例外:

E/AndroidRuntime? FATAL EXCEPTION: main
Process: com.example.myapp, PID: 20759
java.lang.IllegalStateException: Activity has been destroyed
        at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1345)
        at android.app.BackStackRecord.commitInternal(BackStackRecord.java:597)
        at android.app.BackStackRecord.commit(BackStackRecord.java:575)
        at android.app.DialogFragment.show(DialogFragment.java:230)
        at com.example.myapp.view.dialog.MyDialogFragment.showMyDialog(MyDialogFragment.java:41)
        at com.example.myapp.MyActivity.showMyDialog(MyActivity.java:208)
        at com.example.myapp.MyActivity.onEvent(MyActivity.java:232)
        at com.example.myapp.MyActivity.handleMessage(MyActivity.java:89)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5017)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
        at dalvik.system.NativeStart.main(Native Method) …
Run Code Online (Sandbox Code Playgroud)

android illegalstateexception android-fragments android-dialogfragment

12
推荐指数
2
解决办法
7472
查看次数