我的应用中有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
我无法在我的应用中跟踪崩溃的原因.我有一个片段显示一个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
我是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
我试图用毕加索从三个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
在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
我知道这个问题在SO中多次提出过,但我无法弄清楚我的确切问题.
我使用以下代码从数据库(表1)获取数据,并根据检索值更新另一个Table2.它在一些Android版本中工作正常,但是当我用Android 4.0.3进行测试时.我这个迷途java.lang.IllegalStateException:?.attempt to re-open an already-closed object的sum_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
尝试在Android上以可靠的方式执行异步操作是不必要的错综复杂的,即AsyncTask在概念上是否真的有缺陷,或者我只是缺少某些东西?
现在,这是在引入Fragments之前的全部内容.随着Fragments的引入,onRetainNonConfigurationInstance()已被弃用.因此,最新的Google宽恕黑客是使用持久的非UI片段,当发生配置更改时(即旋转屏幕,更改语言设置等),它会从您的Activity中附加/分离.
示例:https: //code.google.com/p/android/issues/detail?id = 23096#c4
从理论上讲,上面的黑客可以让你绕过可怕的:
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.lang.IllegalStateException:无法调用来传递结果",并没有立即理解为什么.以下是我为何发生这种情况的答案,也许这有助于某人.
我刚刚创建了一个新的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)
有谁知道如何解决这个问题?
如果
你能提供帮助我真的很感激.我曾尝试 …
我在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
android ×9
java ×2
grails ×1
imageview ×1
ondestroy ×1
picasso ×1
robolectric ×1
touch-event ×1
view ×1