1. 操作步骤:
--在Email帐号设置中, 选择ringtone; 按home 键; N个没什么印象的操作; 在homescreen中按Email icon时, 抛出如何异常(之后没有再出现):I/ActivityManager( 127): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.email/.activity.Welcome bnds=[83,240][157,319] } from pid 228
E/Cursor ( 5443): Invalid statement in fillWindow()
W/dalvikvm( 890): threadid=1: thread exiting with uncaught exception (group=0x40018560)
E/AndroidRuntime( 890): FATAL EXCEPTION: main
E/AndroidRuntime( 890): android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
E/AndroidRuntime( 890): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
E/AndroidRuntime( 890): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
E/AndroidRuntime( 890): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
E/AndroidRuntime( 890): at android.database.CursorWrapper.getString(CursorWrapper.java:135)
E/AndroidRuntime( 890): at com.android.internal.database.SortCursor.getString(SortCursor.java:205)
E/AndroidRuntime( 890): at android.widget.SimpleCursorAdapter.bindView(SimpleCursorAdapter.java:130)
E/AndroidRuntime( 890): at android.widget.CursorAdapter.getView(CursorAdapter.java:186)
E/AndroidRuntime( 890): at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:220)
E/AndroidRuntime( 890): at android.widget.AbsListView.obtainView(AbsListView.java:1409)
E/AndroidRuntime( 890): at android.widget.ListView.measureHeightOfChildren(ListView.java:1216)
E/AndroidRuntime( 890): at android.widget.ListView.onMeasure(ListView.java:1127)
E/AndroidRuntime( 890): at android.view.View.measure(View.java:8313)
E/AndroidRuntime( 890): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
E/AndroidRuntime( 890): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
E/AndroidRuntime( 890): at android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
E/AndroidRuntime( 890): at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
E/AndroidRuntime( 890): at android.view.View.measure(View.java:8313)
E/AndroidRuntime( 890): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
E/AndroidRuntime( 890): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
E/AndroidRuntime( 890): at android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
E/AndroidRuntime( 890): at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
E/AndroidRuntime( 890): at com.android.internal.widget.WeightedLinearLayout.onMeasure(WeightedLinearLayout.java:60)
E/AndroidRuntime( 890): at android.view.View.measure(View.java:8313)
E/AndroidRuntime( 890): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
E/AndroidRuntime( 890): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
E/AndroidRuntime( 890): at android.view.View.measure(View.java:8313)
E/AndroidRuntime( 890): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
E/AndroidRuntime( 890): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
E/AndroidRuntime( 890): at android.view.View.measure(View.java:8313)
E/AndroidRuntime( 890): at android.view.ViewRoot.performTraversals(ViewRoot.java:841)
E/AndroidRuntime( 890): at android.view.ViewRoot.handleMessage(ViewRoot.java:1862)
E/AndroidRuntime( 890): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 890): at android.os.Looper.loop(Looper.java:130)
E/AndroidRuntime( 890): at android.app.ActivityThread.main(ActivityThread.java:3683)
E/AndroidRuntime( 890): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 890): at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime( 890): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
E/AndroidRuntime( 890): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
E/AndroidRuntime( 890): at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager( 127): Force finishing activity android/com.android.internal.app.RingtonePickerActivity
W/ActivityManager( 127): Activity pause timeout for HistoryRecord{409a1238 android/com.android.internal.app.RingtonePickerActivity}
D/NotificationService( 127): enqueueNotificationInternal bCMASMessage: false
D/NotificationService( 127): enqueueNotificationInternal sound, vib2.查看了下RingtonePickerActivity, cursor是使用managedQuery获取的, 也没有发现cursor被冻结或关闭; 哪位知道根源, 或者知道如何提高重现概率、以便分析?
--在Email帐号设置中, 选择ringtone; 按home 键; N个没什么印象的操作; 在homescreen中按Email icon时, 抛出如何异常(之后没有再出现):I/ActivityManager( 127): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.email/.activity.Welcome bnds=[83,240][157,319] } from pid 228
E/Cursor ( 5443): Invalid statement in fillWindow()
W/dalvikvm( 890): threadid=1: thread exiting with uncaught exception (group=0x40018560)
E/AndroidRuntime( 890): FATAL EXCEPTION: main
E/AndroidRuntime( 890): android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
E/AndroidRuntime( 890): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
E/AndroidRuntime( 890): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
E/AndroidRuntime( 890): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
E/AndroidRuntime( 890): at android.database.CursorWrapper.getString(CursorWrapper.java:135)
E/AndroidRuntime( 890): at com.android.internal.database.SortCursor.getString(SortCursor.java:205)
E/AndroidRuntime( 890): at android.widget.SimpleCursorAdapter.bindView(SimpleCursorAdapter.java:130)
E/AndroidRuntime( 890): at android.widget.CursorAdapter.getView(CursorAdapter.java:186)
E/AndroidRuntime( 890): at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:220)
E/AndroidRuntime( 890): at android.widget.AbsListView.obtainView(AbsListView.java:1409)
E/AndroidRuntime( 890): at android.widget.ListView.measureHeightOfChildren(ListView.java:1216)
E/AndroidRuntime( 890): at android.widget.ListView.onMeasure(ListView.java:1127)
E/AndroidRuntime( 890): at android.view.View.measure(View.java:8313)
E/AndroidRuntime( 890): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
E/AndroidRuntime( 890): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
E/AndroidRuntime( 890): at android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
E/AndroidRuntime( 890): at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
E/AndroidRuntime( 890): at android.view.View.measure(View.java:8313)
E/AndroidRuntime( 890): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
E/AndroidRuntime( 890): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
E/AndroidRuntime( 890): at android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
E/AndroidRuntime( 890): at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
E/AndroidRuntime( 890): at com.android.internal.widget.WeightedLinearLayout.onMeasure(WeightedLinearLayout.java:60)
E/AndroidRuntime( 890): at android.view.View.measure(View.java:8313)
E/AndroidRuntime( 890): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
E/AndroidRuntime( 890): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
E/AndroidRuntime( 890): at android.view.View.measure(View.java:8313)
E/AndroidRuntime( 890): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
E/AndroidRuntime( 890): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
E/AndroidRuntime( 890): at android.view.View.measure(View.java:8313)
E/AndroidRuntime( 890): at android.view.ViewRoot.performTraversals(ViewRoot.java:841)
E/AndroidRuntime( 890): at android.view.ViewRoot.handleMessage(ViewRoot.java:1862)
E/AndroidRuntime( 890): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 890): at android.os.Looper.loop(Looper.java:130)
E/AndroidRuntime( 890): at android.app.ActivityThread.main(ActivityThread.java:3683)
E/AndroidRuntime( 890): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 890): at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime( 890): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
E/AndroidRuntime( 890): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
E/AndroidRuntime( 890): at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager( 127): Force finishing activity android/com.android.internal.app.RingtonePickerActivity
W/ActivityManager( 127): Activity pause timeout for HistoryRecord{409a1238 android/com.android.internal.app.RingtonePickerActivity}
D/NotificationService( 127): enqueueNotificationInternal bCMASMessage: false
D/NotificationService( 127): enqueueNotificationInternal sound, vib2.查看了下RingtonePickerActivity, cursor是使用managedQuery获取的, 也没有发现cursor被冻结或关闭; 哪位知道根源, 或者知道如何提高重现概率、以便分析?
你给的index是不是不对?你看一下你要取的字段的index,可以打开db看一下。
数据库中有相关信息, index为0, 肯定没有问题的。从异常看,cursor内容是空的, 可以查询数据库的结果不应该为空。 之后没有重现过, 没法调试, 纠结。
没有代码很难分析,或者是看一下你的查询语句是否有问题
1. 该activity继承关系:
public final class RingtonePickerActivity extends AlertActivity implements
AdapterView.OnItemSelectedListener, Runnable, DialogInterface.OnClickListener,
AlertController.AlertParams.OnPrepareListViewListener {2. Curor的获取, 通过activity的manage query获取以及维护:
public Cursor getCursor() {
if (mCursor != null && mCursor.requery()/* && mCursor.getCount() > 0*/) {//92972
return mCursor;
}
final Cursor internalCursor = getInternalRingtones();
final Cursor drmCursor = mIncludeDrm ? getDrmRingtones() : null;
final Cursor mediaCursor = getMediaRingtones();
// US_csy 20111014 : [ // add vibration
final Cursor vibrationCursor = (mType == TYPE_RINGTONE) ? getVibrationtones() : null; return mCursor = new SortCursor(new Cursor[] { internalCursor, drmCursor, mediaCursor, vibrationCursor},
MediaStore.Audio.Media.DEFAULT_SORT_ORDER); 3. 问题的另一个关键点是, 从AccountSettings界面, 进入RingtonePickerActivity 没有问题;该问题是之后点击homescreen下应用图标,重新显示RingtonePickerActivity 出现的;并且, 重新操作, 没有重现。太诡异了。
返回的cursor即使是1条信息、也必须要通过cursor.moveToFirst()、才能将游标对应到真正的这条数据】、
我想知道的是为什么cursor的数量为0, 之前以及之后都不为0的.在代码中采用manage curosr查询, 只有这一个地方(当然cursor.requery没算)。 对这个cursor的赋值, 可以查看RingtoneManager.java的代码。郁闷!