这让我疯狂了好几天了.我有一个非常复杂的Android应用程序.它使用多个线程从服务器提取数据并填充SQLite数据库.我正在使用单例来引用我的SQLiteOpenHelper扩展.我在每个活动中打开和关闭数据库.
该错误仅发生在我4次活动深度然后尝试退出的情况下.我已经尝试了各种方法来打开和关闭数据库,包括将关闭从onDestroy()移动到onPause()方法,还添加另一个打开到onResume().
另外值得注意的是,我的活动大量使用了ListViews和ExpandableListViews,据我所知,这可能会导致数据库关闭,基于这篇文章:http: //darutk-oboegaki.blogspot.com/2011/03/sqlitedatabase-is-closed- automatically.html
我已经完成了代码并确保我要么关闭所有游标,要么将它们分配给适配器,调用startManagingCursor().
有没有人知道发生了什么?
java.lang.RuntimeException: Unable to resume activity {com.fieldone/com.fieldone.DispatchActivity}: java.lang.IllegalStateException: database /data/data/com.fieldone/databases/InterstateAirConditioning-1602814322.db already closed
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3347)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3362)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2162)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:144)
at android.app.ActivityThread.main(ActivityThread.java:4937)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException: database /data/data/com.fieldone/databases/InterstateAirConditioning-1602814322.db already closed
at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:237)
at android.database.sqlite.SQLiteQuery.requery(SQLiteQuery.java:145)
at android.database.sqlite.SQLiteCursor.requery(SQLiteCursor.java:567)
at android.app.Activity.performRestart(Activity.java:3836)
at android.app.Activity.performResume(Activity.java:3857)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3337)
... 10 more
Run Code Online (Sandbox Code Playgroud)
更新: 我已经修复了问题,但不确定为什么要修复它.所以,也许有人知道或可以解释.
当我处于活动堆栈的第4个活动时,我试图通过db.close()关闭数据库.无论我把它放在哪里,在我得到我需要的数据之后的onCreate中,或者在onStop或onDestroy中,它都会产生这个错误.如果我不关闭数据库,我没有问题.因此,导致数据库自动关闭的原因.奇怪的是,虽然我在最后的活动中使用了expandableListView,但我没有使用cursorAdapter.有人有什么想法?很想明白这一点.
database sqlite android illegalstateexception sqliteopenhelper
我正在尝试将带有Android的UDP数据包发送到我的计算机上用C#编写的服务器.当我在手机上运行应用程序时,我会收到非法状态异常.我认为这可能与在主要活动上执行网络操作有关,但我不知道如何解决这个问题.这是我的客户:
public class MainActivity extends Activity {
WifiManager wifi;
InetAddress dev_ip;
final int serverPort = 31337;
Thread drawThread = new Thread(new drawer());
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//set up wifi and connection
wifi = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
int ip = info.getIpAddress();
String ipaddr = (ip & 0xff) + "." + (ip >> 8 & 0xff) + "." + (ip >> 16 & 0xff) + "." + (ip >> 24 & 0xff);
try {
dev_ip …Run Code Online (Sandbox Code Playgroud) 每当我加载片段的主要活动并且用户启动新活动,切换设备的方向并返回主活动时,我就会收到此错误.
@Override
public void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.home_layout);
super.onCreate(savedInstanceState);
fragmentManager = getSupportFragmentManager();
fragment = fragmentManager.findFragmentById(R.id.layFragment);
initialize();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
setContentView(R.layout.home_layout);
initialize();
super.onConfigurationChanged(newConfig);
}
private void initialize() {
layStatus = (LinearLayout) findViewById(R.id.layStatus);
txtStatus = (TextView) findViewById(R.id.txtStatus);
....
handleFragments(lastFragmentId);
}
public void handleFragments(int fragmentId) {
if (fragment == null) {
FragmentTransaction ft = fragmentManager.beginTransaction();
if (fragmentId==someFragmentId){
ft.replace(R.id.layFragment, new FragmentSomeFragment());
}
else
....
ft.commit();
}
}
Run Code Online (Sandbox Code Playgroud)
在我的android清单中,活动被声明为:
<activity
android:name=".HomeActivity"
android:configChanges="keyboardHidden|orientation" />
<activity
Run Code Online (Sandbox Code Playgroud)
在另一个关于SO的问题中,我发现这可能是由支持库中的一个错误造成的,我添加没有任何运气:
// needed as a workaround for …Run Code Online (Sandbox Code Playgroud) 我刚刚遇到了JavaFX和Swing的奇怪之处.
处理已添加到JFrame或JPanel的JavaFX Panel时,重新添加新的JFXPanel将抛出IllegalStateException:"已调用Platform.exit".
在我的情况下,这是在我用JFXPanels删除了一些JPanels然后尝试重新添加它们之后发生的.
我在此活动中收到IllegalStateException但不太确定发生了什么.这是QuickContactActivity中的ViewPagerAdapter类.
private class ViewPagerAdapter extends FragmentPagerAdapter {
public ViewPagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public Fragment getItem(int position) {
QuickContactListFragment fragment = new QuickContactListFragment();
final String mimeType = mSortedActionMimeTypes.get(position);
final List<Action> actions = mActions.get(mimeType);
fragment.setActions(actions);
return fragment;
}
@Override
public int getCount() {
return mSortedActionMimeTypes.size();
}
}
Run Code Online (Sandbox Code Playgroud)
这是崩溃日志:
07-15 09:49:21.060: E/com.##.##.##.Application(12378): Thread uncaught exception:
07-15 09:49:21.060: E/com.##.##.##.Application(12378): java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 0, found: 1 Pager id: com.##.##.android:id/item_list_pager Pager class: …Run Code Online (Sandbox Code Playgroud) android illegalstateexception fragmentpageradapter android-pageradapter
我正在开发一个启动器应用程序,当用户验证自身时会显示对话框碎片.大部分时间这都运行良好,但有时我有这个错误日志:
02-07 18:55:56.619: E/AndroidRuntime(1300): java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
02-07 18:55:56.619: E/AndroidRuntime(1300): at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1280)
02-07 18:55:56.619: E/AndroidRuntime(1300): at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1291)
02-07 18:55:56.619: E/AndroidRuntime(1300): at android.app.BackStackRecord.commitInternal(BackStackRecord.java:548)
02-07 18:55:56.619: E/AndroidRuntime(1300): at android.app.BackStackRecord.commit(BackStackRecord.java:532)
02-07 18:55:56.619: E/AndroidRuntime(1300): at android.app.DialogFragment.dismissInternal(DialogFragment.java:292)
02-07 18:55:56.619: E/AndroidRuntime(1300): at android.app.DialogFragment.dismiss(DialogFragment.java:258)
02-07 18:55:56.619: E/AndroidRuntime(1300): at com.blablabla.android.app.fragments.login.LoginResultFragment$CloseDialogRunnable.run(LoginResultFragment.java:59)
02-07 18:55:56.619: E/AndroidRuntime(1300): at android.os.Handler.handleCallback(Handler.java:615)
02-07 18:55:56.619: E/AndroidRuntime(1300): at android.os.Handler.dispatchMessage(Handler.java:92)
02-07 18:55:56.619: E/AndroidRuntime(1300): at android.os.Looper.loop(Looper.java:137)
02-07 18:55:56.619: E/AndroidRuntime(1300): at android.app.ActivityThread.main(ActivityThread.java:4745)
02-07 18:55:56.619: E/AndroidRuntime(1300): at java.lang.reflect.Method.invokeNative(Native Method)
02-07 18:55:56.619: E/AndroidRuntime(1300): at java.lang.reflect.Method.invoke(Method.java:511)
02-07 18:55:56.619: …Run Code Online (Sandbox Code Playgroud) 我可以看到在多个设备上引发了异常,但使用该异常的字符串从Google的测试类中找不到任何异常。您有什么暗示为什么会这样吗?
Fatal Exception: java.lang.IllegalStateException: Can't change activity type once set: { mBounds=Rect(0, 0 - 1080, 2076) mAppBounds=Rect(0, 0 - 1080, 2076) mWindowingMode=fullscreen mActivityType=home} activityType=standard
at android.os.Parcel.createException(Parcel.java:1974)
at android.os.Parcel.readException(Parcel.java:1934)
at android.os.Parcel.readException(Parcel.java:1884)
at android.app.IActivityManager$Stub$Proxy.startActivity(IActivityManager.java:3604)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1669)
at android.app.Activity.startActivityForResult(Activity.java:4688)
at android.support.v4.app.FragmentActivity.startActivityForResult(SourceFile:767)
at android.app.Activity.startActivityForResult(Activity.java:4646)
at android.support.v4.app.FragmentActivity.startActivityForResult(SourceFile:754)
at android.app.Activity.startActivity(Activity.java:5007)
at android.app.Activity.startActivity(Activity.java:4975)
at com.myapp.MyActivity.showAndroidHomeScreen(SourceFile:208)
at com.myapp.MyActivity.onBackPressed(SourceFile:548)
at android.app.Activity.onKeyUp(Activity.java:3168)
at android.view.KeyEvent.dispatch(KeyEvent.java:3374)
at android.app.Activity.dispatchKeyEvent(Activity.java:3451)
at android.support.v4.app.SupportActivity.superDispatchKeyEvent(SourceFile:108)
at android.support.v4.view.KeyEventDispatcher.dispatchKeyEvent(SourceFile:84)
at android.support.v4.app.SupportActivity.dispatchKeyEvent(SourceFile:126)
at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(SourceFile:535)
at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(SourceFile:59)
at android.support.v7.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(SourceFile:2533)
at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:564)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:6012)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5867)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5320)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5373)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5339) …Run Code Online (Sandbox Code Playgroud) I am using a FragmentActivity and sometimes on Crashlytics, I am able to see an exception Fatal Exception: java.lang.RuntimeException: Unable to pause activity
Below is the onPause of my FragmentActivity
@Override
protected void onPause() {
super.onPause();
if (EventBus.getDefault().isRegistered(this))
EventBus.getDefault().unregister(this);
}
Run Code Online (Sandbox Code Playgroud)
Here is the stack trace of this crash.
Fatal Exception: java.lang.RuntimeException: Unable to pause activity {com.avail.easyloans.android/com.avail.easyloans.feature.marketplace.activities.ActivityMarketplace}: java.lang.IllegalStateException: Restarter must be created only during owner's initialization stage
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3471)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3430)
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3402)
at android.app.ActivityThread.access$1300(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1416)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157) …Run Code Online (Sandbox Code Playgroud) android android-lifecycle illegalstateexception onpause android-fragmentactivity
我正在尝试录制音频,但是类的start()方法会MediaRecorder抛出一个IllegalStateException.我使用以下代码:
MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile("/sdcard/");
try {
recorder.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.i("Try","Exception");
recorder.start();
Run Code Online (Sandbox Code Playgroud)
并获得许可
<uses-permission android:name="android.permission.RECORD_AUDIO" />
Run Code Online (Sandbox Code Playgroud) android user-permissions illegalstateexception mediarecorder
我正在开发一个Android应用程序.在这个应用程序中,我在片段中显示MapView.如果我的设备旋转,我尝试使用以下方法之一移动相机:
mapa.animateCamera(cameraUpdate);
要么
mapa.moveCamera(cameraUpdate);
然后我的应用程序崩溃并显示以下错误:
java.lang.IllegalStateException: View size is too small after padding
at com.google.a.a.ab.b(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.c.a.a(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.c.a.a(Unknown Source)
at com.google.maps.api.android.lib6.d.dw.a(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.c.a.a(Unknown Source)
at com.google.maps.api.android.lib6.d.et.a(Unknown Source)
at com.google.android.gms.maps.internal.j.onTransact(SourceFile:83)
at android.os.Binder.transact(Binder.java:380)
at com.google.android.gms.maps.internal.IGoogleMapDelegate$zza$zza.moveCamera(Unknown Source)
at com.google.android.gms.maps.GoogleMap.moveCamera(Unknown Source)
at com.accionplus.dbdplus.utils.MapUtils.centrarCamara(MapUtils.java:88)
at com.accionplus.dbdplus.utils.MapUtils.centrarCamara(MapUtils.java:52)
at com.accionplus.dbdplus.controladores.pdv.RutaProgramadaFragment$4.onMyLocationButtonClick(RutaProgramadaFragment.java:274)
at com.google.android.gms.maps.GoogleMap$3.onMyLocationButtonClick(Unknown Source)
at com.google.android.gms.maps.internal.zzo$zza.onTransact(Unknown Source)
at android.os.Binder.transact(Binder.java:380)
at com.google.android.gms.maps.internal.be.a(SourceFile:81)
at com.google.maps.api.android.lib6.d.ak.onClick(Unknown Source)
at android.view.View.performClick(View.java:5156)
at android.view.View$PerformClick.run(View.java:20755)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5832)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at …Run Code Online (Sandbox Code Playgroud)