Форум программистов, компьютерный форум CyberForum.ru

Появляется CursorIndexOutOfBoundsException - Android

Восстановить пароль Регистрация
 
Frai32
2 / 2 / 0
Регистрация: 24.08.2013
Сообщений: 134
12.02.2015, 14:39     Появляется CursorIndexOutOfBoundsException #1
Пытаюсь присвоить значение из таблицы таким способом:

Java
1
2
String sID = cursor.getString(indexOfID);
где indexOfID это indexOfID = cursor.getColumnIndex(DBExport.COLUMN_ID);
На что получаю исключение:

that are not also 02-12 21:24:00.599: E/AndroidRuntime(5686): android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 5


Почему такое исключение появляться?

и как от него избавиться?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2015, 14:39     Появляется CursorIndexOutOfBoundsException
Посмотрите здесь:

Не появляется окно, но появляется процесс Софт
появляется файл
Android не появляется java файл
Eclipse. Не появляется иконка при инсталляции apk Android
Android На телефоне виджет не появляется в списке виджетов
Не появляется приложение в genymotion Android
Android AlertDialog появляется дважды
Виджет Android 4.1 не появляется в списке Android
Android APP не появляется в экране приложений но есть в Настройки/Приложения
Android AppWidget: виджет не появляется на некоторых девайсах
Android Виджет не появляется в списке виджетов
Android При запуске приложения появляется клавиатура

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rube
910 / 558 / 87
Регистрация: 13.02.2014
Сообщений: 2,066
12.02.2015, 14:58     Появляется CursorIndexOutOfBoundsException #2
А где cursor.moveToNext()?
И не весь код приведен.
Frai32
2 / 2 / 0
Регистрация: 24.08.2013
Сообщений: 134
12.02.2015, 16:06  [ТС]     Появляется CursorIndexOutOfBoundsException #3
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
package com.example.tacticalgenirator;
 
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
 
import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
 
public class MainActivity extends ActionBarActivity implements OnClickListener {
 
    TextView tvObjective,
             tvDiscription;
     Button btGenirate;
     ListView lvObjective;
     Random random;
    SimpleCursorAdapter scAdapter;
    DBExport dbe;
    DB  db;
    String[] from;  
    int[] to;
    int indexOfID=0;
    Cursor cursor, cursor1;
    List<Integer> ObjectivList = new ArrayList<Integer>();
    String sID;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        
        tvObjective = (TextView) findViewById(R.id.tvObjectiv);
        tvDiscription =(TextView) findViewById(R.id.tvDescription);
        btGenirate = (Button) findViewById(R.id.btGenirate);
        lvObjective = (ListView) findViewById(R.id.lvObjectiv);
        
        ObjectivList.add(0);
        
        random = new Random();
        dbe = new DBExport(this);
        dbe.open();
        dbe.Check();
        dbe.OpenDATABASE();
        
        db = new DB(this);
        db.open();
        
        cursor = dbe.getAllData();
        cursor1 = db.getAllData();
        startManagingCursor(cursor);
        startManagingCursor(cursor1);
        indexOfID = cursor.getColumnIndex(DBExport.COLUMN_ID);
        crRightListView();
        
        btGenirate.setOnClickListener(this);
        
        
        //      if (savedInstanceState == null) {
//          getSupportFragmentManager().beginTransaction()
//                  .add(R.id.container, new fragView()).commit();
//      }
    }
    
    private void crRightListView()
      {
              String[] from1 = new String[] { DB.COLUMN_TID, DB.COLUMN_NAME};
              int[] to1 = new int[] {R.id.tvTID, R.id.tvName };
              scAdapter = new SimpleCursorAdapter(this, R.layout.bd_item, cursor1, from1, to1);
              lvObjective.setAdapter(scAdapter);
              
            
       }
    
    private void GenirateObjective()
    {
         db.addRec(cursor.getInt(cursor.getColumnIndex(DBExport.COLUMN_ID)), 
                   cursor.getString(cursor.getColumnIndex(DBExport.COLUMN_NAME)), 
                   cursor.getString(cursor.getColumnIndex(DBExport.COLUMN_DS)),
                   cursor.getInt(cursor.getColumnIndex(DBExport.COLUMN_TID)));
                 // cursor.getInt(nameColIndexCO));
         
            cursor.requery();
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
 
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
 
    public void onClick(View v) {
        switch (v.getId()) 
        {
            case R.id.btGenirate:
                int Res = random.nextInt(6+1);
                 sID = cursor.getString(indexOfID);
//              String sName = cursor.getString(cursor.getColumnIndex(DBExport.COLUMN_NAME));
//              String sDiscription = cursor.getString(cursor.getColumnIndex(DBExport.COLUMN_DS));
//              for(int i = 0; i<ObjectivList.size(); i++)
//              {
//                if ( ObjectivList.contains(Res))
//                {
//                    break;
//                    
//                }
//                else
//                    ObjectivList.add(Res);
//                    if(Res == cursor.getInt(cursor.getColumnIndex(DBExport.COLUMN_ID)))
//                    {
//                      GenirateObjective();
//                      tvObjective.setText(sID +" : "+sName);
//                      tvDiscription.setText(sDiscription);
//                      break;
//                    }
//                
//                    
//              }
//              
//              for(int i = 0; i<ObjectivList.size(); i++)
//              {
//                Log.d("tag",""+ObjectivList.get(i));
//                    
//              }
                
            break;
            default:
            break;
        }
    }
    
 
}
Вот весь код. И что за метод cursor.moveToNext()?

Добавлено через 25 минут
Я добавил метод cursor.moveToNext() и код начал компилироваться,оказывается он нужен.

Добавлено через 33 минуты
У меня возник вопрос как сделать что бы после закрытия приложения поля в таблице БД обнулялись?
Rube
910 / 558 / 87
Регистрация: 13.02.2014
Сообщений: 2,066
12.02.2015, 16:24     Появляется CursorIndexOutOfBoundsException #4
Цитата Сообщение от Frai32 Посмотреть сообщение
Я добавил метод cursor.moveToNext() и код начал компилироваться,оказывается он нужен.
Конечно нужен, курсор этож множество.
Цитата Сообщение от Frai32 Посмотреть сообщение
У меня возник вопрос как сделать что бы после закрытия приложения поля в таблице БД обнулялись?
Повесить на кнопку выхода db.execSQL("DROP TABLE IF EXISTS " + MY_TABLE);
Yandex
Объявления
12.02.2015, 16:24     Появляется CursorIndexOutOfBoundsException
Ответ Создать тему
Опции темы

Текущее время: 05:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru