Как может быть решено внеблоковое исключение?

Я получаю доступ к телефонной книге по одному запросу и получаю информацию о последнем звонке из другого запроса. Проблема в том, что, когда я получаю дату от моего управляемого курсора, я получаю исключение outoffbound, и мое приложение упало. Пожалуйста, помогите мне, я только хочу взять дату последнего звонка каждого номера (если не ноль).

мой запрос курсора для получения деталей телефонной книги:

Cursor mCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, new String[] {Phone._ID, Phone.DISPLAY_NAME, Phone.NUMBER}, null, null, null);
          startManagingCursor(mCursor);

запрос для получения даты последнего звонка определенного номера:-

Cursor managedCursor = managedQuery(CallLog.Calls.CONTENT_URI,null, selection,null, Order);

Цикл, в котором я получаю дату последнего звонка на номер, который был взят из курсора сведений телефонной книги:-

 mCursor.moveToFirst();

          while(!mCursor.isAfterLast()) {

                JSONObject contact = new JSONObject();
                JSONObject parentCont = new JSONObject();

                 String name = mCursor.getString(mCursor.getColumnIndex(Phone.DISPLAY_NAME));
                 String number = mCursor.getString(mCursor.getColumnIndex(Phone.NUMBER));
                 String selection = android.provider.CallLog.Calls.NUMBER+"="+number;
                 String Order = android.provider.CallLog.Calls.DATE + " DESC";
                          Cursor managedCursor = managedQuery(CallLog.Calls.CONTENT_URI,null, selection,null, Order);
                          managedCursor.moveToNext();   
              String     callDate = managedCursor.getString(managedCursor.getColumnIndex(android.provider.CallLog.Calls.DATE));

                Date callDayTime = new Date(Long.valueOf(callDate));

                //String dateColumn = cursorcalllog.getString(cursorcalllog.getColumnIndex(CallLog.Calls.DATE));

                 Log.d("CONTACT", "Name: " + name + "| Number: " + number+"Recently Called"+callDayTime);

Ошибки Logcat:-

04-03 05:33:43.090: E/AndroidRuntime(963): FATAL EXCEPTION: main
04-03 05:33:43.090: E/AndroidRuntime(963): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.socialize_us/com.example.socialize_us.CustomTabActivity}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.socialize_us/com.example.socialize_us.PhoneBookActivity}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2084)
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2111)
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.app.ActivityThread.access$600(ActivityThread.java:134)
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1251)
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.os.Looper.loop(Looper.java:137)
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.app.ActivityThread.main(ActivityThread.java:4666)
04-03 05:33:43.090: E/AndroidRuntime(963):  at java.lang.reflect.Method.invokeNative(Native Method)
04-03 05:33:43.090: E/AndroidRuntime(963):  at java.lang.reflect.Method.invoke(Method.java:511)
04-03 05:33:43.090: E/AndroidRuntime(963):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
04-03 05:33:43.090: E/AndroidRuntime(963):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
04-03 05:33:43.090: E/AndroidRuntime(963):  at dalvik.system.NativeStart.main(Native Method)
04-03 05:33:43.090: E/AndroidRuntime(963): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.socialize_us/com.example.socialize_us.PhoneBookActivity}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2084)
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.app.ActivityThread.startActivityNow(ActivityThread.java:1924)
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135)
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347)
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:682)
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.widget.TabHost.setCurrentTab(TabHost.java:346)
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.widget.TabHost.addTab(TabHost.java:236)
04-03 05:33:43.090: E/AndroidRuntime(963):  at com.example.socialize_us.CustomTabActivity.onCreate(CustomTabActivity.java:33)
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.app.Activity.performCreate(Activity.java:4510)
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2048)
04-03 05:33:43.090: E/AndroidRuntime(963):  ... 11 more
04-03 05:33:43.090: E/AndroidRuntime(963): Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.database.AbstractCursor.checkPosition(AbstractCursor.java:400)
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.database.CursorWrapper.getString(CursorWrapper.java:241)
04-03 05:33:43.090: E/AndroidRuntime(963):  at com.example.socialize_us.PhoneBookActivity.onCreate(PhoneBookActivity.java:107)
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.app.Activity.performCreate(Activity.java:4510)
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)
04-03 05:33:43.090: E/AndroidRuntime(963):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2048)
04-03 05:33:43.090: E/AndroidRuntime(963):  ... 21 more    

2 ответа

Решение

Ваш курсор пуст и когда вы пытаетесь получить значения из пустого mcusor, вы получаете курсор IndexOutOfBoundsException.

Попробуйте прочитать значения из курсора в этом формате, чтобы избежать IndexoutOfBoundsException

if(mCursor.moveToFirst())
{

  do
{
...
...
}
while(mCursor.moveToNext())

}

Ошибка: вызвано: android.database.CursorIndexOutOfBoundsException: запрошен индекс 0, с размером 0 необходимо добавить исключение, если значение равно 0, информации нет.

Другие вопросы по тегам