ورود

View Full Version : معنای این ارور در برنامه : CursorIndexOutOfBoundsException



omidandroid
سه شنبه 12 فروردین 1393, 12:14 عصر
سلام دوستان.
من یه چند روزیه برنامم روی این ارور گیر کرده و هرکاری میکنم درست نمیشه!!
توی stackoverflow هم پرسیدم به جوابه درستی نرسیدم!
میگفتن دیتابیس خالیه در صورتی که اینطور نیست!
دیتابیسم هم داخلیه !

کسی از دوستان میدونه علت های این ارور چیا هستش؟!
ممنون.

android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0

rubiks.kde
سه شنبه 12 فروردین 1393, 13:11 عصر
اون قسمت از گد رو که این ارور رو میده بزارید.

چیزی هم که گفتن درسته ولی شما کد رو بزاری دقیق میشه گفت مشکل چیه

#root#
سه شنبه 12 فروردین 1393, 13:11 عصر
شما کدت رو بزار ، کوئری که میگیرید یا تهی هستش یا اینکه cursor رو نمیفرستین به اولین ردیف از نتیجه.

Nevercom
سه شنبه 12 فروردین 1393, 13:21 عصر
این خطا معمولاً زمانی رخ میده که دنبال رکوردی در جدول می گردید که وجود نداره و نتیجه ی کوئری یک Cursor خالی هست

omidandroid
سه شنبه 12 فروردین 1393, 13:40 عصر
من یه کلاس دارم که تکست هام داخلش هستن و یک سری تنظیمات فونت و سایز که داخل یه تابع به اسم فونت گذاشتم در همین کلاس!
زمانی که این ارور رو میده وقتی تابع font رو پاک میکنم ارور رفع میشه اما نمیدونم مشکل تابع چیه!!

این کلاس DataBaseHandler هستش:


public class DatabaseHandler { static final String NAME = "name";
private DatabaseHelper dbHelper;
private SQLiteDatabase database;
public DatabaseHandler(Context context){
dbHelper = new DatabaseHelper(context);
}
public void open() throws SQLException{
database=dbHelper.getWritableDatabase();
}
public void close(){
dbHelper.close();
}
public void insertContact(String name){
ContentValues cv = new ContentValues();
cv.put(NAME, name);
database.insert(dbHelper.getTableName(), NAME, cv);
}
public void updateContact(long id,String name) {
ContentValues cv = new ContentValues();
cv.put(NAME, name);
database.update(dbHelper.getTableName(), cv, dbHelper.getRowIdName() + "=" + id, null);
}
public String Display(int id){
Cursor cursor = database.query(dbHelper.getTableName(), null, null, null, null, null, null);
Contact contact = new Contact();
cursor.moveToPosition(id);
contact.setName(cursor.getString(1));
cursor.close();
return contact.getName();
}
public Integer count(){
Cursor cursor = database.query(dbHelper.getTableName(), null, null, null, null, null, null);
Contact contact = new Contact();
contact.setcounti(cursor.getCount());
return contact.getcounti();
}
public List<Contact> getAllContacts() {
List<Contact> contacts = new ArrayList<Contact>();
Cursor cursor = database.query(dbHelper.getTableName(), null, null, null, null, null, null);
Contact contact = new Contact();
cursor.moveToLast();
cursor.close();
return contacts;
}
Contact cursorToContact(Cursor cursor) {
Contact contact = new Contact();
contact.setId(cursor.getLong(0));
contact.setName(cursor.getString(1));
return contact;
}
}


اینم همون کلاس Text من که روی تابع font ارور میده :


public class Text extends Activity {
private Ui mUi=null;
private DatabaseHandler dbHandler;
private Contact contact;

public String txt1="فقط برای تست 1";
public String txt2="فقط برای تست 1";
public String txt3="فقط برای تست 1";
public String txt4="فقط برای تست 1";
/////////////////

private class Ui{

private ImageView img;
private ImageView share;
private TextView text;
private TextView titr;
private Typeface badr;
private Typeface zar;
private Typeface Aria;


public int time = 0;

private Activity mActivity;


public Ui(Activity activity){
mActivity = activity;
sabt();
start();
}


private void sabt() {

text=(TextView) findViewById(R.id.b_maintext);
titr=(TextView) findViewById(R.id.b_titrtext);
share=(ImageView) findViewById(R.id.share_b_text);
img=(ImageView) findViewById(R.id.b_imagemain);


/////////
badr=Typeface.createFromAsset(getAssets(), "Font/badr.ttf"+"");
zar=Typeface.createFromAsset(getAssets(), "Font/zar.ttf"+"");
Aria=Typeface.createFromAsset(getAssets(), "Font/Aria.ttf"+"");
/////////

Bundle extras = getIntent().getExtras();

String value1 = extras.getString("b_titrtext");
String value2 = extras.getString("b_maintext");
String value3 = extras.getString("b_imagetext");


titr.setText(value1);
int v2 =Integer.parseInt(value2);
int v3 =Integer.parseInt(value3);



if(v2==1){
text.setText(txt1);
}
if(v2==2){
text.setText(txt2);
}
if(v2==3){
text.setText(txt3);
}
if(v2==4){
text.setText(txt4);
}

share.setOnClickListener(new OnClickListener(){


public void onClick(View arg0) {

String shareBody = text.getText().toString();
Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
sharingIntent.putExtra(android.content.Intent.EXTR A_SUBJECT, "");
sharingIntent.putExtra(android.content.Intent.EXTR A_TEXT, shareBody);
startActivity(Intent.createChooser(sharingIntent, "Share With ..."));
}

});


if(v3==1){
img.setImageResource(R.drawable.love7);
}
if(v3==2){
img.setImageResource(R.drawable.love7);
}
if(v3==3){
img.setImageResource(R.drawable.love7);
}
if(v3==4){
img.setImageResource(R.drawable.love7);
}



titr.setTypeface(zar);

}



private void font(){

String font=dbHandler.Display(1);
String size=dbHandler.Display(2);
String mode=dbHandler.Display(3);

int font2=Integer.parseInt(font.toString());
int size2=Integer.parseInt(size.toString());
int mode2=Integer.parseInt(mode.toString());

float size14=14;
float size18=18;
float size20=20;


if(font2==1){
text.setTypeface(zar);
}
if(font2==1){
text.setTypeface(badr);
}
if(font2==1){
text.setTypeface(Aria);
}

if(size2==1){
text.setTextSize(size14);
}
if(size2==1){
text.setTextSize(size18);
}
if(size2==1){
text.setTextSize(size20);
}
}




private void start() {
final Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask()
{
public void run()
{
runOnUiThread(new Runnable()
{
public void run()
{


t.cancel();
font(); ///// این رو که پاک میکنم ارور رفع میشه


}

});
}

}, 1, 1);

}

}


protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.text);
dbHandler=new DatabaseHandler(this);
contact=new Contact();
mUi=new Ui(this);
}
protected void onResume() {
super.onResume();
dbHandler.open();
}


@Override
protected void onPause() {
super.onPause();
dbHandler.close();
}




}

omidbizdotcom
سه شنبه 12 فروردین 1393, 13:54 عصر
من فکر می کنم مشکل از داخل متد Display



cursor.getString(1)


بعد از اینکه کرسر و مو کردی چک کن ببین خالی نیست و ایندکس ۱و۲و۳ داره یا نه


if(c.moveToPosition(1)){
}

#root#
سه شنبه 12 فروردین 1393, 14:00 عصر
ای کاش کلاس dbhelper رو هم قرار میدادید ، به هر حال نحوه کوئری گرفتن شما به نظر صحیح نمیاد ، شما تو چند اینجوری کوئری گرفتی که من ندیدم جایی :
query(dbHelper.getTableName(), null, null, null, null, null, null);
فکر نکنم بشه تنها با دادن اسم جدول به این متد خروجی بشه گرفت ، به این لینک هم سر بزنید تا با نحوه صحیح کوئری به این روش آشنا بشید.

http://stackoverflow.com/questions/1243199/
در ضمن شما برای ذخیره تنظیمات برنامه بهتره از sharedPreference استفاده کنید.

omidandroid
سه شنبه 12 فروردین 1393, 18:27 عصر
ممنون از پاسخ و راهنمایی دوستان!
اما همچنان من بی پاسخ ماندم و مشکل حل نشده ...