تالار گفتمان nCIS.ir

نسخه‌ی کامل: ساخت لیست علاقمندی با دیتابیس
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام
من میخوام لیست علاقمندی ها بسازم.
تویِ دیتابیسم یه ستون با نام 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();
بنظرم بهتره برای خوندن علاقمندی‌‌ها یه کوئری جداگانه اجرا کنید:
SELECT * FROM poems WHERE fav_flag=1
یعنی کلا بیام یه public تعریف کنم؟
یا همون کدها رو ویرایش کنم؟
یه متد دیگه اضافه کنید که علاقمندی‌ها رو برمیگردونه. اون قبلی‌ها هم باشه واسه وقتی که کل رکوردها رو لازم دارین.
میشه کدش رو بذارید؟
از این متد استفاده کنید:
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;
}
ممنون
اینو برای اکتیویتی 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();

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

http://stackoverflow.com/questions/51127...er-working