PDA

View Full Version : این دستورات مشکلش کجاست که رکورد ها تکرار میشن!!!



meysam jahedi
یک شنبه 19 بهمن 1393, 00:26 صبح
سلام
یه دیتابیس ساده دارم که هیچ چیز مبهمی توش نیست ، و توسط دستورات زیر از دیتابیس میخونم و تو لیست ویو نشون میدم



public void refresh2(){

mydb=mydata.getReadableDatabase();
Cursor cu=mydb.rawQuery("select * from tbl where fav=1",null);
int s =cu.getCount();
String ss=String.valueOf(s);
if (s==0){
finish();
Toast.makeText(getApplicationContext(), "لیست علاقه مندیهای شما خالی است", Toast.LENGTH_LONG).show();
}
NAME=new String[s];
kholase=new String[s];

for(int i=0;i<s;i++){

NAME[i]=fav_display(i,2);
kholase[i]=fav_display(i,5);

}

setListAdapter(new MyAdapterFav(this,NAME,kholase));
mydb.close();
Toast.makeText(getApplicationContext(), ss, Toast.LENGTH_LONG).show();///تعدا رکورد ها
}

public String fav_display(int row,int field){

Cursor cu=mydb.rawQuery("select * from tbl where fav=1 ", null);
cu.moveToPosition(row);
String b=cu.getString(field);
return b;
}

public class MyAdapterFav extends BaseAdapter {
private Fav fav;

ListActivity a;

String[] N;
String[] kh;


private mydatabase mydata;
private SQLiteDatabase mydb;
public MyAdapterFav (ListActivity act,String[] name,String[] kholase){
a=act;
this.N=name;
this.kh=kholase;

this.mydata = new mydatabase(act.getApplicationContext());
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return N.length;
}

@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}

@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}


@Override
public View getView(final int pos, View convertView, ViewGroup arg2) {

View mylist;
LayoutInflater inflater = (LayoutInflater) a.getSystemService(Context.LAYOUT_INFLATER_SERVICE );
if (convertView == null) {
mylist = new View(a);

mylist = inflater.inflate(R.layout.row_listfav, null);

TextView textView1 = (TextView) mylist.findViewById(R.id.row_listfav_name);
TextView textView2 = (TextView) mylist.findViewById(R.id.row_page);
final ImageView img=(ImageView) mylist.findViewById(R.id.row_listfav_img);


textView2.setText("صفحه : "+N[pos]);
textView1.setText(kh[pos]);
textView1.setTypeface(Main.font);
textView2.setTypeface(Main.font);

if (Main.mode.equals("day")) {

textView1.setTextColor(Color.BLACK);
textView2.setTextColor(Color.BLACK);
}else {
textView1.setTextColor(Color.WHITE);
textView2.setTextColor(Color.WHITE);

}


img.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {

mydb=mydata.getWritableDatabase();
mydb.execSQL("UPDATE tbl SET fav='0' WHERE page='"+N[pos]+"'");
mydb.close();
((Fav) a).refresh2();
notifyDataSetChanged();
}
});


} else {
mylist = convertView;
}
return mylist;
}


}

نمیدونم مشکلش کجاست که فقط تا نهایت 6 الی 7 تا رکورد رو تو لیست ویو نشون میده و باز شروع به تکرار میکنه !!! با اینکه تو لود اولیه یه toast گذاشتم و تعداد دقیق رکورد ها هم نشون میده و همه رکورد هایی که باید رو " دریافت کرده ، اما با این حال همه رو نشون نمیده و فقط 5 الی 6 تا رو میاره و در ادامش شروع به تکرار 2 یا 3 تا از رکورد های پیشین میکنه ؟!!! دیتابیس هم چیز خاصی نداره که بگیم group میخواد !!

ali_khodayar
یک شنبه 19 بهمن 1393, 08:57 صبح
راه شما رو نمیدونم درسته یا نه اما من تا اونجایی که میدونم زمانی میخوایم اطلاعات رو از بانک گرفته و نمایش بدیم از while استفاده می کنن.
احتمالأ مشکل شما توی حلقه for ، عوضش کن بجاش while بزار ببین درست میشه ؟

while(cu.moveToNext())
{مقدار دهی رو انجام بده }

meysam jahedi
دوشنبه 20 بهمن 1393, 19:51 عصر
راه شما رو نمیدونم درسته یا نه اما من تا اونجایی که میدونم زمانی میخوایم اطلاعات رو از بانک گرفته و نمایش بدیم از while استفاده می کنن.
احتمالأ مشکل شما توی حلقه for ، عوضش کن بجاش while بزار ببین درست میشه ؟

while(cu.moveToNext())
{مقدار دهی رو انجام بده }
نه ، بازم همونجوری چند تا رکورد رو میاره و باز دوباره از اول همونا رو تکراری میاره

meysam jahedi
دوشنبه 20 بهمن 1393, 21:42 عصر
دوستان میشه راهنمایی کنین لطفا

مصطفی شکوری
دوشنبه 20 بهمن 1393, 23:49 عصر
جدیدا منم یه همچین بلایی سرم اومده و برای منم همچین اتفاقی می افته.من از گریدویو استفاده کردم.به نظرم مشکل هرچی که هست مربوط به آداپتره.
دوستان خدا خیرتون بده جواب بدید.

tux-world
سه شنبه 21 بهمن 1393, 09:44 صبح
یه مثال میزنم اینطوری استفاده کنید تست بشه ببینم مشکل از لود از دیتابیستون هست یا نه

private void loadRow(String mobile) {
String aFilter = String.format("mobile = '%s'", mobile);
Cursor cursor = null;
try {
receiveSmsArray.clear();
cursor = G.db.getReadableDatabase().query(DatabaseHelper.TN _RECEIVE, null, aFilter, null, null, null, "receive_date ASC");
if (cursor.moveToFirst()) {
do {

}
while (cursor.moveToNext());
}
cursor.close();
} finally {
cursor.close();
}
}