انجمن سایت کلیدستان


رتبه موضوع:
  • 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
خواندن اطلاعات از دیتابیس و نمایش درListView (در برنامه اندروید)

خواندن اطلاعات از دیتابیس و نمایش درListView (در برنامه اندروید)

#1
با سلام
من اطلاعاتی رو داخل یک دیتابیس ذخیره کردم و اون رو بازیابی میکنم حالا برای نمایش داخل ListView فقط اخرین گزینه در دیتابیس رو نشون میده در صورتی که میخوام همه موارد نشون داده بشه. کدهای من به صورت زیر است:
 
کد پی‌اچ‌پی:
//Create or Open DB
        
final SQLiteDatabase db openOrCreateDatabase("add_note_db"Context.MODE_PRIVATE,    null);
        
Cursor cursor db.rawQuery("SELECT * FROM add_note_table WHERE fid = '"id +"'"null);
        if (
cursor.moveToFirst()) {
            do {
                
ArrayList<Stringnotes null;
                
String note cursor.getString(cursor.getColumnIndex("note"));
                
Log.d("Show Notes: "note); // داخل لاگ کلیه محتوا نمایش داده میشه به درستی
                
notes = new ArrayList<String>;(Arrays.asList(note)); 
                for(
String currentString notes) {
                
ListView lvShowNotes = (ListViewfindViewById(R.id.listViewShowNotes);
//داخل لیست ویو فقط آخرین مورد در بانک اطلاعاتی نمایش داده میشه ولی میخواهم همه رو نمایش بده
                
ArrayAdapter<Stringadapter = new ArrayAdapter<String>;(ShowNotes.this
                        
,android.R.layout.simple_list_item_1notes);
                
lvShowNotes.setAdapter(adapter);
                }
            } while (
cursor.moveToNext());
        }else {
            
tvsn.setText("Id " id " has no note");
        }

        
db.close(); 
 
لطفا راهنمایی کنید. فکر میکنم فقط با تغییر چند دستور مشکل حل بشه ولی نمیدونم چیه.
پاسخ

خواندن اطلاعات از دیتابیس و نمایش درListView (در برنامه اندروید)

#2
سلام.
کد زیر را ببینید :
کد پی‌اچ‌پی:
Cursor cursor db.rawQuery("SELECT * FROM add_note_table WHERE fid = '"id +"'"null); 

در کد فوق، یک query را برای خواندن اطلاعاتی از جدول (table) اجرا کرده ایم. دستور به صورت زیر می باشد :

کد پی‌اچ‌پی:
SELECT FROM add_note_table WHERE fid '"+ id +"' 

اگر دقت کنید، شما در دستور بالا، تعیین کرده اید که تنها ردیفی (row) از جدول (table) خوانده شود که مقدار ستون fid آن برابر یک مقدار مشخص (id) باشد. بنابراین اگر قصد دارید که تمامی ردیف های جدول خوانده شوند، باید کد را به صورت زیر تغییر بدهید (بخش انتهای آن حذف می شود) :

کد پی‌اچ‌پی:
SELECT FROM add_note_table 

بعد که کل ردیف ها خوانده شود، آنگاه برای هر item از ListView ، اطلاعات یکی از ردیف های خوانده شده، نمایش داده می شود، یعنی بخش بعدی کدها را هم باید تصحیح کنید (این مورد را معمولا در adapter تعیین شده برای ListView می نویسند). به عنوان مثال، یک بار شناسایی ListView کافی است، اما کدها به گونه ای می باشد که ListView چندین بار شناسایی می شود.
یا اصلا می توانستید همان کد را در adapter تعیین شده برای ListView بنویسید (هر بار خواندن یک ردیف از جدول).

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط shafiei7 ، mahdi2elve

خواندن اطلاعات از دیتابیس و نمایش درListView (در برنامه اندروید)

#3
ممنون از پاسخ شما ولی انتخابم درست است در دیتابیس ردیف هایی است که fid برابر با مثلا 10 است و من میخواهم اون ردیف‌ها در لیست ویو نمایش داده بشن که مثلا شاید پنج عدد یا بیشتر باشه.
مشکل من در Select نیست فقط مشکلم در نمایش در لیست ویو است که ممنون میشوم با توجه به کدهای من طریقه نوشتن صحیح آن با adapter را بنویسید.
پاسخ

خواندن اطلاعات از دیتابیس و نمایش درListView (در برنامه اندروید)

#4
پس مشکل از همان بخش دوم کدها است که تذکر دادم چندین بار اجرا می شود.
مثلا کد زیر، چندین بار (به تعداد ردیف های خوانده شده)، اجرا می شود :

کد پی‌اچ‌پی:
ListView lvShowNotes = (ListViewfindViewById(R.id.listViewShowNotes); 

حالا کد بالا برای شناسایی ListView است، اما موردی که باعث می شود محتوا به درستی نمایش داده نشود، طریقه ساخت notes می باشد. هر بار، تنها یک مقدار در notes ذخیره می شود و شما هم با آن، adapter را می سازید. بنابراین تنها در آخرین مرحله، آخرین ردیف در ListView نمایش داده می شود. 
شما باید notes را به صورت شامل مقدار همه ردیف های مورد نظرتان بسازید، یعنی با استفاده از همین کدهایی که بر اساس cursor نوشته اید، بعد که این بخش از کدها تمام شد و مطمئن شدید که notes به صورت آرایه ای شامل همه آن ردیف ها است، آنگاه کدهای شناسایی ListView و ساخت adapter برای آن (بر اساس notes) را می نویسید (کاملا بعد از بخش مربوط به فراخوانی و پردازش اطلاعات جدول، یعنی بعد از db.close).

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط shafiei7

خواندن اطلاعات از دیتابیس و نمایش درListView (در برنامه اندروید)

#5
با توجه به راهنمایی های شما کدها به موارد زیر تغییر کردند و به درستی اجرا میشوند ولی هنوز فقط آخرین گزینه در دیتابیس داخل لیست ویو نمایش داده میشه. نمیدونم چطوری در notes همگی رو ذخیره کنم. اگر نوعش بکنم آرایه خطا میگیره.
 
 
کد پی‌اچ‌پی:
//Create or Open DB
        
final SQLiteDatabase db openOrCreateDatabase("add_note_db"Context.MODE_PRIVATE,    null);
        
Cursor cursor db.rawQuery("SELECT * FROM add_note_table WHERE fid = '"id +"'"null);
        
ArrayList<Stringnotes null;
        if (
cursor.moveToFirst()) {
            do {
                
                
String note cursor.getString(cursor.getColumnIndex("note"));
                
Log.d("Show Notes: "note);
                
notes = new ArrayList<String>(Arrays.asList(note)); 
                
            } while (
cursor.moveToNext());
        }else {
            
tvsn.setText("Id " id " has no note");
        } 
        
db.close();
        
        
ListView lvShowNotes = (ListViewfindViewById(R.id.listViewShowNotes);
        
ArrayAdapter<Stringadapter = new ArrayAdapter<String>(ShowNotes.this
                
,android.R.layout.simple_list_item_1notes);
        
lvShowNotes.setAdapter(adapter); 

 
پاسخ

خواندن اطلاعات از دیتابیس و نمایش درListView (در برنامه اندروید)

#6
نه نیازی نیست که حتما تبدیل به آرایه بشه (در ارسال قبل، منظورم از آرایه، همان لیست آرایه ای (ArrayList) بود، یعنی صرفا منظورم داشتن تمامی مقادیر به صورت یک آرایه بود). شما باید نحوه تعریف notes را تصحیح کنید.
کد زیر را ببینید :

کد پی‌اچ‌پی:
String note cursor.getString(cursor.getColumnIndex("note"));
notes = new ArrayList<String>(Arrays.asList(note)); 

چون کد بالا در یک روند تکرار شونده اجرا می شود، شما هر بار دارید notes را برابر ردیف فعلی (در روند تکرار شونده) قرار می دهید. پس باید هر بار، مقدار note به مقدارهای ذخیره شده در notes افزوده شود، نه اینکه کل notes را برابر note فعلی قرار بدهیم. این بخش را باید تغییر بدهید. برای افزودن عنصر جدید به یک لیست آرایه ای (ArrayList)، کلید زیر را بخوانید (استفاده از روش add) :

کلید شماره 315

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط shafiei7

خواندن اطلاعات از دیتابیس و نمایش درListView (در برنامه اندروید)

#7
من این کد notes.add(note); جایگزین کد notes = new ArrayList<String>(Arrays.asList(note)); کردم که هر دفعه داخل شرط ردیف ها رو اضافه کنه داخل notes ولی خطای NullPointException میگیرد.
پاسخ

خواندن اطلاعات از دیتابیس و نمایش درListView (در برنامه اندروید)

#8
مشکل حل شد Admin عزیز با تغییر کد روبرو: ArrayList<String> notes = new ArrayList<String>();

خیلی خیلی سپاسگذارم از سایت خوبتون که این همه مطالب آموزشی ارائه میدید و وقت میزارید برای پاسخ به کاربران.
 
پاسخ
 سپاس شده توسط admin

خواندن اطلاعات از دیتابیس و نمایش درListView (در برنامه اندروید)

#9
(۱۳۹۳/۰۹/۲۲, ۰۲:۴۴ ب.ظ)shafiei7 نوشته: مشکل حل شد Admin عزیز با تغییر کد روبرو: ArrayList<String> notes = new ArrayList<String>();

خیلی خیلی سپاسگذارم از سایت خوبتون که این همه مطالب آموزشی ارائه میدید و وقت میزارید برای پاسخ به کاربران.
 

سلام دوست عزیز .. من این بحث رو دنبال کردم و میخواستم طبق کد ها پیش برم و برای همین یه سوال داشتم . گفتین با تغییر کد روبرو ، منظورتون این هست که این کد ArrayList<String> notes = new ArrayList<String>(); رو کلا جایگزین این کد notes = new ArrayList<String>(Arrays.asList(note)); کردین ؟؟ اونوقت  note ازین یه قسمت کد حذف شده ، مشکلی نداشته ؟
پاسخ

خواندن اطلاعات از دیتابیس و نمایش درListView (در برنامه اندروید)

#10
(۱۳۹۵/۰۱/۰۶, ۱۱:۴۷ ب.ظ)yasiiii نوشته:
(۱۳۹۳/۰۹/۲۲, ۰۲:۴۴ ب.ظ)shafiei7 نوشته: مشکل حل شد Admin عزیز با تغییر کد روبرو: ArrayList<String> notes = new ArrayList<String>();

خیلی خیلی سپاسگذارم از سایت خوبتون که این همه مطالب آموزشی ارائه میدید و وقت میزارید برای پاسخ به کاربران.
 

سلام دوست عزیز .. من این بحث رو دنبال کردم و میخواستم طبق کد ها پیش برم و برای همین یه سوال داشتم . گفتین با تغییر کد روبرو ، منظورتون این هست که این کد ArrayList<String> notes = new ArrayList<String>(); رو کلا جایگزین این کد notes = new ArrayList<String>(Arrays.asList(note)); کردین ؟؟ اونوقت  note ازین یه قسمت کد حذف شده ، مشکلی نداشته ؟
اون قسمت مهم نیست و در اصل در این کد ی چیز اضافه بود ، پس برای نوشتن سورس ها و اجراش هیچ مشکلی براتون پیش نمیاد ، اما خب من یکی بهتون توصیه میکنم اگر برنامه نویسی با سرور رو خودتون بلدیدید بهتره خودتون بنویسید . کد این دوستمون بیشتر بدرد آموزش میخوره تا ساخت یک لیست ویوی که از دیتابیس خوانده میشه ...
پاسخ
 سپاس شده توسط شماره مجازی امارات ، تلگرام ضد فیلتر 2023


پرش به انجمن:


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