رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
ساخت لیست علاقمندی با دیتابیس
#1
سلام
من میخوام لیست علاقمندی ها بسازم.
تویِ دیتابیسم یه ستون با نام fav_flag و نوع BOOL ساختم.

این کد مربوط به فایل favorite:
    private ListView FavortieListView;
   private List<HashMap<String , Object>> favorite_list;
   private DatabaseHandler db;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_favorites);

       FavortieListView = (ListView) findViewById(R.id.listview_favorites);

       db = new DatabaseHandler( getBaseContext() );

       db.open();

       favorite_list = db.getTableOfFavoriteContent();

       String[] from= {"poetry", "poetname","fav_flag","see_flag"};
       int[] to= {R.id.matne_sher, R.id.shaer,R.id.btn_fav,R.id.btn_see_unsee};

       SimpleAdapter adb = new SimpleAdapter(
               getBaseContext() , favorite_list , R.layout.custom_sher_list , from , to
       );

       FavortieListView.setAdapter(adb);
       db.close();

   }

کد فایل DatabaseHandler:
    public List<HashMap <String , Object>> getAshar () {
       Cursor c = db.rawQuery("SELECT poems.*,poets.name AS poetname FROM poems LEFT OUTER JOIN poets ON poems.poets_id=poets.id WHERE first_category_id=1", null);
       List<HashMap<String , Object>> allData = new ArrayList<>();
       while (c.moveToNext()) {
           HashMap<String , Object> temp = new HashMap<>();
           temp.put("id", c.getString(c.getColumnIndex("id")));
           temp.put("first_category_id", c.getString(c.getColumnIndex("first_category_id")));
           temp.put("poets_id", c.getString(c.getColumnIndex("poets_id")));
           temp.put("poetry", c.getString(c.getColumnIndex("poetry")));
           temp.put("poetname", c.getString(c.getColumnIndex("poetname")));

           if( c.getString( c.getColumnIndex("fav_flag") ).equals("1") ) {
               temp.put( "fav_flag" , R.drawable.fav_enable );
           }
           else {
               temp.put( "fav_flag" , R.drawable.fav_disable );
           }

           if( c.getString(c.getColumnIndex("see_flag")).equals("1") ) {
               temp.put( "see_flag" , R.drawable.see );
           }
           else {
               temp.put( "see_flag" , R.drawable.unsee );
           }
           allData.add(temp);
       }
       return allData;
   }

اما این کدها نمیدونم درست نوشتم یا خیر:
            if( c.getString( c.getColumnIndex("fav_flag") ).equals("1") ) {
              temp.put( "fav_flag" , R.drawable.fav_enable );
          }
          else {
              temp.put( "fav_flag" , R.drawable.fav_disable );
          }

          if( c.getString(c.getColumnIndex("see_flag")).equals("1") ) {
              temp.put( "see_flag" , R.drawable.see );
          }
          else {
              temp.put( "see_flag" , R.drawable.unsee );

که البته see برای خوانده شده و نشده هست (که اون رو مجزا میپرسم)
حالا توی فایل اکتیویتی که میخوام نمایش بدم از کد زیر استفاده میکنم:
        contentListView = (ListView) findViewById(R.id.list_view);

       db = new DatabaseHandler( getBaseContext() );
       db.open();
       ashar = db.getAshar();

       String[] from= {"poetry", "poetname","fav_flag","see_flag"};

       int[] to= {R.id.matne_sher, R.id.shaer,R.id.btn_fav,R.id.btn_see_unsee};

       SimpleAdapter adb = new SimpleAdapter(
               getBaseContext() , ashar , R.layout.custom_sher_list , from , to
       );

حالا صفحه favorite بالا میاد اما صفحه اشعار بالا نمیاد و خطا میده و مربوط به همون فایل DatabaseHandler هست.

ممنون میشم راهنماییم کنید که چطور درست کنم.

       contentListView.setAdapter( adb );


       db.close();
پاسخ
تشکر شده توسط:
#2
بنظرم بهتره برای خوندن علاقمندی‌‌ها یه کوئری جداگانه اجرا کنید:
SELECT * FROM poems WHERE fav_flag=1
پاسخ
تشکر شده توسط: af94
#3
یعنی کلا بیام یه public تعریف کنم؟
یا همون کدها رو ویرایش کنم؟
پاسخ
تشکر شده توسط:
#4
یه متد دیگه اضافه کنید که علاقمندی‌ها رو برمیگردونه. اون قبلی‌ها هم باشه واسه وقتی که کل رکوردها رو لازم دارین.
پاسخ
تشکر شده توسط:
#5
میشه کدش رو بذارید؟
پاسخ
تشکر شده توسط:
#6
از این متد استفاده کنید:
public List<HashMap <String , Object>> getFavAshar () {
    Cursor c = db.rawQuery("SELECT poems.*,poets.name AS poetname FROM poems LEFT OUTER JOIN poets ON poems.poets_id=poets.id WHERE first_category_id=1 AND fav_flag=1", null);
    List<HashMap<String , Object>> allData = new ArrayList<>();
    while (c.moveToNext()) {
        HashMap<String , Object> temp = new HashMap<>();
        temp.put("id", c.getString(c.getColumnIndex("id")));
        temp.put("first_category_id", c.getString(c.getColumnIndex("first_category_id")));
        temp.put("poets_id", c.getString(c.getColumnIndex("poets_id")));
        temp.put("poetry", c.getString(c.getColumnIndex("poetry")));
        temp.put("poetname", c.getString(c.getColumnIndex("poetname")));
        temp.put( "fav_flag", R.drawable.fav_enable);
        if(c.getString(c.getColumnIndex("see_flag")).equals("1")) {
            temp.put( "see_flag", R.drawable.see);
        } else {
            temp.put( "see_flag" , R.drawable.unsee);
        }
        allData.add(temp);
    }
    return allData;
}
پاسخ
تشکر شده توسط: af94
#7
ممنون
اینو برای اکتیویتی favorite زدم.
اما اومدم کد رو ویرایش کردم:
        Cursor c = db.rawQuery("SELECT poems.*,poets.name AS poetname FROM poems LEFT OUTER JOIN poets ON poems.poets_id=poets.id WHERE fav_flag=1", null);

و first_category_id رو حذف کردم اشکالی نداره؟

حالا تویِ اکتویتی یکی از اشعارم تصویر علاقمندی ها اومده اما وقتیکه کلیک میکنم روش چیزی نمیشه !

این کدم:
    private ListView contentListView;
   private List<HashMap<String , Object>> ashar;
   private DatabaseHandler db;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.sher);

       contentListView = (ListView) findViewById(R.id.list_view);
       db = new DatabaseHandler( getBaseContext() );
       db.open();
       ashar = db.getAshar();
       String[] from= {"poetry", "poetname","fav_flag","see_flag"};
       int[] to= {R.id.matne_sher, R.id.shaer,R.id.btn_fav,R.id.btn_see_unsee};
       SimpleAdapter adb = new SimpleAdapter(
               getBaseContext() , ashar , R.layout.custom_sher_list , from , to
       );
       contentListView.setAdapter( adb );
       db.close();

پاسخ
تشکر شده توسط:
#8
خوب چیزی برای onClickListener مشخص نکردین. آداپترتون کاری انجام نمیده وقتی روی عناصر کلیک میشه. این لینک رو ببینید:

http://stackoverflow.com/questions/51127...er-working
پاسخ
تشکر شده توسط: af94




کاربران در حال بازدید این موضوع: 1 مهمان